1. 程式人生 > 其它 >重新排序得到 2 的冪 -- LeetCode -- 10.29

重新排序得到 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;
    }
};