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

知识点总结:

  1. 求x的y次幂:pow(x,y)
  2. 统计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;
    }
};

posted @ 2022-01-16 14:57  Jane8  阅读(46)  评论(0)    收藏  举报