LeetCode-869. 重新排序得到 2 的幂

143 阅读1分钟

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));
    }
}

运行结果: image.png

4. 总结

上述代码是一个比较笨的方式,这个在于枚举没有太多的情况下。如果数据太多不适用这个方法。占用的空间内存太多。这种做法性能也不好。

我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢