题目描述:
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
示例如下:
方法描述:
首先我们可以先找到2的幂数的个数,如:中2的幂的个数是31个。我们可以先把数进行处理,然后统计他们中0~9数字出现的频率,再拿到n的时候同样统计0~9出现的频率,然后再把这些数来进行对比。
private static String countBits(int num) {
// 0~9数字出现的频率
char[] arr = new char[10];
while (num != 0) {
arr[num % 10]++;
num /= 10;
}
return new String(arr);
}
完整代码:
class Solution {
private static Set<String> set = new HashSet<>();
static {
// 先预处理所有2的幂的十进制中0~9出现的频率
// 一共31个数
for (int i = 0; i <= 30; i++) {
set.add(countBits(1 << i));
}
}
public boolean reorderedPowerOf2(int n) {
// 计算 n 中0~9出现的频率是否有与2的幂相同的
return set.contains(countBits(n));
}
private static String countBits(int num) {
// 0~9数字出现的频率
char[] arr = new char[10];
while (num != 0) {
arr[num % 10]++;
num /= 10;
}
return new String(arr);
}
}