给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
示例 1:
输入:1
输出:true
示例 2:
输入:10
输出:false
示例 3:
输入:16
输出:true
示例 4:
输入:24
输出:false
示例 5:
输入:46
输出:true
提示:
1 <= N <= 10^9
解题思路:很简单,N最大到10^9次方,也就是最多到2^30次方,把这31个数都存起来,用每个数的0-9的个数用数组存起来,在与n中含0-9的个数相比较,如果有完全相同的就返回true,否则返回false
class Solution {
public boolean reorderedPowerOf2(int n) {
int temp[][]=new int[31][10];
for(int i=0;i<31;i++)
{
int num=(int)Math.pow(2, i);
while(num>0)
{
temp[i][num%10]++;
num/=10;
}
}
int nums[]=new int[10];
while(n>0)
{
nums[n%10]++;
n/=10;
}
for(int i=0;i<31;i++)
{
boolean flag=true;
for(int j=0;j<10;j++)
{
if(temp[i][j]!=nums[j])
flag=false;
}
if(flag)
return true;
}
return false;
}
}