题目
类型:Array
解题思路
举例入参为46
- 经过代码中的init方法,首先会把1到10的9次方所有偶数(也就是2的幂)都通过countDigits方法计算一遍
- countDigits所做的工作就是初始化10位数的char数组,把4和6上的位置1,然后转成string存到HashSet里面
- 然后所有数字都初始化之后再判断入参经过countDigits方法后是否存在于Set中
代码
class Solution {
Set<String> powerOf2Digits = new HashSet<String>();
public boolean reorderedPowerOf2(int n) {
init();
return powerOf2Digits.contains(countDigits(n));
}
public void init() {
for (int n = 1; n <= 1e9; n <<= 1) {
powerOf2Digits.add(countDigits(n));
}
}
public String countDigits(int n) {
char[] cnt = new char[10];
while (n > 0) {
++cnt[n % 10];
n /= 10;
}
return new String(cnt);
}
}