给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
示例 1:
输入:1
输出:true
示例 2:
输入:10
输出:false
示例 3:
输入:16
输出:true
示例 4:
输入:24
输出:false
示例 5:
输入:46
输出:true
提示:
1 <= N <= 10^9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reordered-power-of-2
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
bool reorderedPowerOf2(int N)
{
if((N & (N-1)) == 0)
return true;
string nums;
nums = to_string(N);
vector<string> ans;
string track;
int ret = 0;
//backtrack(nums, track, ans,ret);
int start = 0;
backtrack(nums, start, ret);
if(ret == 1)
return true;
return false;
}
// void backtrack(string& nums, string& track, vector<string>& ans,int& ret)
// {
// if (0 == nums.size())
// {
// /* code */
// //ans.push_back(track);
// //cout<<track
// if(track[0] == '0')
// return;
// long long sum = 0;
// sum = stol(track);
// //cout<<sum<<endl;
// if((sum & (sum-1)) == 0)
// ret = 1;
// }
// else
// {
// for (int i = 0; i < nums.size(); ++i)
// {
// /* code */
// char n = nums[i];
// track.push_back(n);
// nums.erase(nums.begin()+i);
// // 进行下一步决策
// backtrack(nums, track, ans,ret);
// if(ret == 1)
// return;
// nums.insert(i,1,n);
// track.pop_back();
// }
// }
// }
void backtrack(string& A,int& start,int& ret)
{
if (start == A.length())
{
//return isPowerOfTwo(A);
if(A[0] == '0')
return;
long long sum = 0;
sum = stol(A);
//cout<<sum<<endl;
if((sum & (sum-1)) == 0)
ret = 1;
}
else
{
for (int i = start; i < A.length(); ++i) {
// Place A[start] with value A[i].
swap(A, start, i);
// if (permutations(A, start + 1))
// return true;
int tmp = start + 1;
backtrack(A, tmp, ret);
if(ret == 1)
return;
swap(A, start, i);
}
}
}
void swap(string& A, int i, int j)
{
char t = A[i];
A[i] = A[j];
A[j] = t;
}
};