我的思路是这样的:
1、判断通过输入的位数找出可能的取值。比如输入一个四位数,那取值范围就是1000-9999。找出符合x = 2^n且1000 <= x <= 9999的数。存在一个数组nums里面
2、遍历数组nums。对比nums[i]的各位数字和n的各位数字。如果数字的类型数量都一致,就返回true。(数字转字符串,遍历后再存到list里面。排序并对比即可。)
class Solution {
public boolean reorderedPowerOf2(int n) {
int len = Integer.toString(n).length();
int min = (int)Math.pow(10,len - 1);
int max = min * 10;
int i = 0;
int num = 1;
List<Integer> nums = new ArrayList<>();
while(num < max)
{
if(num >= min)
{
nums.add(num);
}
i++;
num = (int)Math.pow(2,i);
}
for(int x : nums)
{
if(panduan(x,n) == true)
return true;
}
return false;
}
public boolean panduan(int x,int y)
{
List list1 = new ArrayList();
List list2 = new ArrayList();
String s1 = Integer.toString(x);
String s2 = Integer.toString(y);
if(s1.length() != s2.length())
return false;
for(int i = 0;i < s1.length();i++)
{
list1.add(s1.charAt(i));
list2.add(s2.charAt(i));
}
Collections.sort(list1);
Collections.sort(list2);
return list1.equals(list2);
}
}