题目描述:
从正整数 N
开始,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true
;否则,返回 false
。
示例 1:
输入:1 输出:true
示例 2:
输入:10 输出:false
示例 3:
输入:16 输出:true
示例 4:
输入:24 输出:false
示例 5:
输入:46 输出:true
提示:
1 <= N <= 10^9
代码:无脑调用next_permutation就行了
class Solution {
public:
vector<int> to_ns(int n)
{
vector<int> ans;
while(n)
{
ans.push_back(n%10);
n/=10;
}
reverse(ans.begin(),ans.end());
return ans;
}
bool is_two(vector<int>& n)
{
if(n[0]==0) return false;
int sum=0;
for(int i=0;i<n.size();i++)
{sum*=10;sum+=n[i];}
return ((sum&sum-1)==0)?true:false;
}
bool reorderedPowerOf2(int N)
{
vector<int> ns=to_ns(N);
sort(ns.begin(),ns.end());
if(is_two(ns))return true;
while(next_permutation(ns.begin(),ns.end()))
{
if(is_two(ns))return true;
}
return false;
}
};