2022-1-15 每日一题 LeetCode 869. 重新排序得到 2 的幂
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reordered-power-of-2
示例 1:
输入:1
输出:true
示例 2:
输入:10
输出:false
示例 5:
输入:46
输出:true
解题思路:
取值1 <= N <= 10^9
以内存在有限个2的幂,即20~229。
所以首先统计2的幂中0-9的出现次数,再统计输入的正整数n中的0-9出现次数,最后比较两者0-9的出现次数是否相同,相同则返回true,否则false
知识点总结:
- 求x的y次幂:pow(x,y)
- 统计0-9次数模板代码:
while(n!=0){
cnt[n%10]++;
n /= 10;
}
代码如下:
class Solution {
public:
bool reorderedPowerOf2(int n) {
int tp;//two power
int pw2[30][10]={0};//存放2^i次幂中0-9出现次数
for(int k=0; k<=29; k++){//10^9以内2的幂取值2^0~2^29
tp = pow(2,k);
while(tp!=0){
pw2[k][tp%10]++;
tp /= 10;
}
}
int cnt[10]={0};//存放正整数n中0-9出现次数
while(n!=0){
cnt[n%10]++;
n /= 10;
}
//遍历两个数组,比较出现次数是否相同
int i,j;
for(i=0; i<=29; i++){
for(j=0; j<10; j++){
if(cnt[j]!=pw2[i][j]) break;
}
if(j>=10){
return true;
}
}
return false;
}
};