本文主要是介绍leetcpde 869. Reordered Power of 2 (重新排序得到 2 的幂),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
从正整数 N
开始,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true
;否则,返回 false
。
示例 1:
输入:1 输出:true
示例 2:
输入:10 输出:false
示例 3:
输入:16 输出:true
示例 4:
输入:24 输出:false
示例 5:
输入:46 输出:true
提示:
1 <= N <= 10^9
分析:
这道题就是最基础的全排列的应用,还有就是快速判断2的幂,一个数为2的幂,就是二进制数只能有一个1,比如32(0x00000010), 所以判断条件就是n & (n-1) 为零。之后就是全排列的算法,这个算法是固定的,多敲就记住了,还有一个坑,就是前导零不算,这样把第一位为零的数去掉即可。
代码:
class Solution {
public:
bool reorderedPowerOf2(int N) {
vector<int> bit;
string s = to_string(N);
int len = s.size();
bool state = false;
int cnt = 0;
dfs(s,0,len, cnt);
if(cnt)
return true;
return false;
}
void dfs(string &str, int i, int len, int &cnt){
if(i == len){
if(str[0] == '0'){
return;
}
else{
int num = stoi(str);
if((num &(num-1)) == 0){
cnt++;
return;
}
}
}
else{
for(int j = i ; j < len; j++){
swap(str[j], str[i]);
dfs(str, i+1, len, cnt);
swap(str[j], str[i]);
}
}
}
};
这篇关于leetcpde 869. Reordered Power of 2 (重新排序得到 2 的幂)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!