【Leetcode】869. Reordered Power of 2

题目地址:

https://leetcode.com/problems/reordered-power-of-2/

给定一个正整数 n n n,可以将其各个位重新排列(首位不能是 0 0 0),问是否能变成 2 2 2的幂。题目保证 1 ≤ n ≤ 1 0 9 1\le n\le 10^9 1n109

由于 2 30 > 1 0 9 2^{30}>10^9 230>109,所以 n n n要变换,只能变换成 2 0 , 2 1 , . . . , 2 29 2^0,2^1,...,2^{29} 20,21,...,229,只需要枚举这 30 30 30个数是否能由 n n n变换成即可。代码如下:

import java.util.Arrays;

public class Solution {
    public boolean reorderedPowerOf2(int n) {
        int[] cnt = new int[10];
        while (n > 0) {
            cnt[n % 10]++;
            n /= 10;
        }
    
        for (int i = 0; i < 30; i++) {
            if (Arrays.equals(cnt, get(1 << i))) {
                return true;
            }
        }
        
        return false;
    }
    
    private int[] get(int x) {
        int[] res = new int[10];
        while (x > 0) {
            res[x % 10]++;
            x /= 10;
        }
        
        return res;
    }
}

时间复杂度 O ( log ⁡ n ) O(\log n) O(logn),空间 O ( 1 ) O(1) O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值