869.重新排序得到2的幂

目标

给定正整数 n ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。

如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。

示例 1:

输入:n = 1
输出:true

示例 2:

输入:n = 10
输出:false

说明:

  • 1 <= n <= 10^9

思路

判断数字重新排列后能否变成 2 的幂。

统计所有数位上数字的出现次数,如果与 2 的幂完全相同则返回 true。

代码


/**
 * @date 2025-08-10 13:49
 */
public class ReorderedPowerOf2_869 {

    public static int[][] nums = new int[31][10];

    static {
        for (int i = 0; i < 31; i++) {
            int num = 1 << i;
            while (num > 0) {
                int d = num % 10;
                nums[i][d]++;
                num /= 10;
            }
        }
    }

    public boolean reorderedPowerOf2(int n) {
        int[] digits = new int[10];
        while (n > 0) {
            int d = n % 10;
            digits[d]++;
            n /= 10;
        }
        here:
        for (int[] num : nums) {
            for (int i = 0; i < num.length; i++) {
                if (num[i] != digits[i]) {
                    continue here;
                }
            }
            return true;
        }
        return false;
    }

}

性能

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注