1.题目描述
给定正整数 n ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
示例 1:
输入:n = 1
输出:true
示例 2:
输入:n = 10
输出:false
提示:
1 <= n <= 109
Tips: 力扣地址:leetcode-cn.com/problems/re…
2. 思路分析
采用最笨的办法,枚举法。在题目中给了n的大小限制。首先我们可以枚举出来在这个范围内2的幂的所有值,这个是有限的且不多。然后能将这些数字变成字符串然后进行获取数字的bytes数组。对byte数组进行重新排序。然后变成字符串。得到的值放入一个Hash Set中。在n的范围内全部枚举出来所有的情况。对于传入的值做同样的操作。然后判断字符串在Hash Set中是否存在。如果存在说明可以通过2的幂方式得到。否则说明不可以
3. AC代码
class Solution {
public boolean reorderedPowerOf2(int n) {
Set<String> set = new HashSet<>();
set.add(1+"");
for (int i = 1;;++i){
int a = 1 << i;
if(a <= 1000000000){
byte[] bytes = (a + "").getBytes();
Arrays.sort(bytes);
set.add(new String(bytes));
}else{
break;
}
}
byte[] bytes = (n + "").getBytes();
Arrays.sort(bytes);
return set.contains(new String(bytes));
}
}
运行结果:
4. 总结
上述代码是一个比较笨的方式,这个在于枚举没有太多的情况下。如果数据太多不适用这个方法。占用的空间内存太多。这种做法性能也不好。
我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢