题目描述
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
提示:
1 <= N <= 10^9
解题思路
-
首先获得给定范围内所有2的冥,并将其转换为字符串,并使该字符串中所有字符有序。将其存入集合set。
首先给出method函数:将数字转为字符串并排序
public String method(int n){ String s = String.valueOf(n); char ch[] = s.toCharArray(); Arrays.sort(ch); return Arrays.toString(ch); }
获得集合set
Set<String> set = new HashSet<String>(); for (int i = 1; i < (int) 1e9 + 10; i *= 2) { set.add(method(i)); }
-
把输入的数n转换为字符串str,并使其中所有字符有序。
String str = method(n);
-
之后将str与set中所有字符串匹配,匹配成功则返回true,否则返回false。
for(String s:set){ if(str.equals(s))return true; }
所有代码如下
import java.util.Set;
public class Solution {
public boolean reorderedPowerOf2(int n) {
// 1、获得所有2的冥,并转成字符串并使字符串有序
Set<String> set = new HashSet<String>();
for (int i = 1; i < (int) 1e9 + 10; i *= 2) {
set.add(method(i));
}
// 2、将n转为字符串,并使其有序,与set中的字符串进行匹配,
// 循环中匹配成功返回true,否则返回false
String str = method(n);
for(String s:set){
if(str.equals(s))return true;
}
return false;
}
// 将数字转为字符串并排序
public String method(int n){
String s = String.valueOf(n);
char ch[] = s.toCharArray();
Arrays.sort(ch);
return Arrays.toString(ch);
}
}