869. 重新排序得到 2 的幂
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
示例 1:
输入:1
输出:true
示例 2:
输入:10
输出:false
示例 3:
输入:16
输出:true
示例 4:
输入:24
输出:false
示例 5:
输入:46
输出:true
提示:
1 <= N <= 10^9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reordered-power-of-2
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:先获取我们得到的数字的0-9这十个数字的个数,存起来。从1开始,每次乘2,得到的数都是2的幂。依次获取这些数的0-9数字的个数,能对应上就不用往下找了,直接返回true。否则找到1000000000就停下,返回false。
class Solution {
public boolean reorderedPowerOf2(int n) {
long i = 1;
int num = -1;
int[] numsN = new int[10];
while(n != 0) {
num = n % 10;
numsN[num]++;
n = n / 10;
}
while(i < 1000000000) {
int[] numsI = new int[10];
long temp = i;
while(temp != 0) {
num = (int)temp % 10;
numsI[num]++;
temp = temp / 10;
}
int j = 0;
for(; j < 10; j++) {
if(numsN[j] != numsI[j]) {
break;
}
}
if(j == 10) {
return true;
}
i = i * 2;
}
return false;
}
}