给定正整数 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) {
string origin(to_string(N));
string powerTwo;
sort(origin.begin(), origin.end());
for(int i = 0; i < 32; ++i)
{
powerTwo = to_string(1<<i);
sort(powerTwo.begin(), powerTwo.end());
if(powerTwo == origin)
return true;
}
return false;
}
};
class Solution {
bool ans = false;
public:
bool reorderedPowerOf2(int N) {
string origin(to_string(N));
bt(origin,0);
return ans;
}
void bt(string str, int i)
{
if(ans == true || i == str.size())
return;
for(int j = i; j < str.size(); ++j)
{
swap(str[i],str[j]);
if(str[0]!='0' && isPowerTwo(stoi(str)))
ans = true;
bt(str,i+1);
swap(str[i],str[j]);
}
}
bool isPowerTwo(int n)
{
return (n&(n-1)) == 0;
}
};