869. Reordered Power of 2

ss
2 min readMar 22, 2021

--

一開始的作法我先去紀錄n的digits到幾位數, 然後窮舉出所有2 的 指數直到超過這個digits, 我過程中只紀錄0–9出現的次數

最後再把N紀錄所有digits的次數, 在看是否在set裡有出現即可

class Solution {
public:
vector<int> get_digits_array(int num){
vector<int> res(10, 0);
while(num > 0){
res[num % 10]++;
num /= 10;
}
return res;
}
bool reorderedPowerOf2(int N) {
int maxNumber = 1;
int t = N;
while(t > 0){
maxNumber *= 10;
t /= 10;
}
int powerof2 = 1;
set<vector<int>> st;
while(powerof2 < maxNumber){
st.insert(get_digits_array(powerof2));
powerof2 *= 2;
}
vector<int> NDigits = get_digits_array(N);
if(st.count(NDigits)) return true;
return false;
}
};

看到一個方法很猛

就是把每個digit做10的指數, 然後全部加起來,

最後在1 到 31bit間看是否有一樣的總和, 即可回傳

概念其實類似, 但這個空間會使用的比較少

class Solution {
public:
long get10PowerSum(int n){
long sum = 0;
while (n > 0){
int t = n % 10;
sum += pow(10, t);
n /= 10;
}
return sum;
}
bool reorderedPowerOf2(int N) {
long target = get10PowerSum(N);
for(int i = 0; i < 31; i++){
if(get10PowerSum(1 << i) == target)
return true;
}
return false;
}
};

但這個應該一般人很難直接做到

--

--

ss
ss

No responses yet