重新排序得到 2 的幂 -- LeetCode -- 10.29

重新排序得到 2 的幂

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

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

 

示例 1:

输入:1
输出:true

示例 2:

输入:10
输出:false

看见重排列就想用DFS....太失败了。。。

方法一:词频统计 + 哈希表

  思路:找到每个 2 的 幂 ,然后统计其中 0 ~ 9 的数量,若是跟 n转换成的字符串 中的数量一样,则么意味着可以转换;

class Solution {
public:
    bool reorderedPowerOf2(int n) {
        map<string, int> map;
        string s = to_string(n);
        for(int i = 1; i <= 1e9; i *= 2){
            string s1 = to_string(i);
            string s2 = "0000000000";
            for(int j = 0; j < s1.size(); j++){
                s2[s1[j] - '0']++;
            }
            map[s2] = 1;
        }
        string s2 = "0000000000";
        for(int i = 0; i < s.size(); i++){
            s2[s[i] - '0']++;
        }
        if(map[s2] == 1)return true;
        else            return false;
    }
};

方法一:排序 + 哈希表

  思路:找到每个 2 的 幂 ,将其排序然后放入 map,然后把 n 转换成字符串后排序 如果在map中,则么意味着可以转换;

class Solution {
public:
    bool reorderedPowerOf2(int n) {
        map<string, int> map;
        string s = to_string(n);
        for(int i = 1; i <= 1e9; i *= 2){
            string ss = to_string(i);
            sort(ss.begin(), ss.end());
            map[ss] = 1;
        }
        sort(s.begin(), s.end());
        if(map[s] == 1) return true;
        else            return false;
    }
};

  

 




posted @ 2021-10-29 11:19  荣荣荣荣荣荣  阅读(50)  评论(0)    收藏  举报