869. 重新排序得到 2 的幂

给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。

如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。

 

示例 1:

输入:1
输出:true
示例 2:

输入:10
输出:false
示例 3:

输入:16
输出:true
示例 4:

输入:24
输出:false
示例 5:

输入:46
输出:true
 

提示:

1 <= N <= 10^9

 

1 <= N <= 10^9,枚举1<<0~1<<29,比较排序后的结果

py

class Solution:
    def reorderedPowerOf2(self, n: int) -> bool:
        cmp=sorted([int(m) for m in str(n)])
        for i in range(30):
            if sorted([int(m) for m in str(1<<i)])==cmp:return True
        return False

c++

class Solution {
public:
    bool reorderedPowerOf2(int n) {
        string cmp=to_string(n);
        sort(cmp.begin(),cmp.end());
        for(int i=0;i<30;i++){
            string cmp1=to_string(1<<i);
            sort(cmp1.begin(),cmp1.end());
            if(cmp1==cmp)return true;
        }
        return false;
    }
};

Java

class Solution {
    public boolean reorderedPowerOf2(int n) {
        char[] cmp=String.valueOf(n).toCharArray();
        Arrays.sort(cmp);
        for(int i=0;i<30;i++){
            char[] cmp1=String.valueOf(1<<i).toCharArray();
            Arrays.sort(cmp1);
            if(Arrays.equals(cmp1,cmp))return true;
        }
        return false;
    }
}

Js

/**
 * @param {number} n
 * @return {boolean}
 */
var reorderedPowerOf2 = function(n) {
    let cmp=n.toString().split("").sort().join("");
    for(let i=0;i<30;i++)
        if((1<<i).toString().split("").sort().join("")===cmp)return true;
    return false;
};

 

posted @ 2021-10-28 11:37  XXXSANS  阅读(87)  评论(0编辑  收藏  举报