LeetCode: 869. Reordered Power of 2
LeetCode: 869. Reordered Power of 2
题目描述
Starting with a positive integer N
, we reorder the digits in any order (including the original order) such that the leading digit is not zero.
Return true if and only if we can do this in a way such that the resulting number is a power of 2
.
Example 1:
Input: 1
Output: true
Example 2:
Input: 10
Output: false
Example 3:
Input: 16
Output: true
Example 4:
Input: 24
Output: false
Example 5:
Input: 46
Output: true
Note:
1 <= N <= 10^9
解题思路 —— 深度优先搜索
通过深度优先搜索遍历所有排列的可能性,然后将其转换为二进制数,如果转换的二进制数只有一个 1
则是二的倍数。
AC 代码
class Solution {
bool dfs(string curNum, string& N)
{
if(curNum.size() == N.size())
{
int num = stoi(curNum);
int cntOne = 0;
while(num)
{
cntOne += num%2;
num /= 2;
}
if(cntOne == 1) return true;
else return false;
}
for(int i = 0; i < N.size(); ++i)
{
if(N[i] < 0) continue;
if(curNum.size() == 0 && N[i] == '0') continue;
curNum.push_back(N[i]);
N[i] = -N[i];
if(dfs(curNum, N) == true) return true;
curNum.pop_back();
N[i] = -N[i];
}
return false;
}
public:
bool reorderedPowerOf2(int N) {
string strN = to_string(N);
return dfs("", strN);
}
};