暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

869. Reordered Power of 2

程序媛的梦想 2019-12-05
351

给一个正整数N,将里面的每个数字任意重排,看是否能得到2的指数。

思路:2的次方数,也就2^0,2^1,2^2  ,...,2^30,共31个,只要把这31个数字,对应10进制求出来,然后对每一位上的数字进行统计,如果统计结果,与被验证的数字统计结果与其中的一个相同,那么这个被验证的数字一定可以组合成2的幂。需要注意的是,为了防止整型溢出,加码后的数字用长整型来表示即可。


时间复杂度:O(logN),空间复杂度:O(1)。

 1class Solution {
2    public boolean reorderedPowerOf2(int N) {
3        long sum = helper(N);
4        for (int i = 0; i < 31; i++) {
5            if (helper(1 << i) == sum) { // 二进制运算,每次将1左移i位,即2的次方,然后再执行helper()。
6                return true;
7            }
8        }
9        return false;
10    }
11
12    // 将N中的每个数字 变成10的这个数字次方变为1,如 N=46,数字4变为10000,数字6变为1000000,然后加起来,得到1010000
13    private long helper(int N) {
14        long res = 0;
15        while (N > 0) {
16            res += Math.pow(10, N % 10);
17            N /= 10;
18        }
19        return res;
20    }
21}

文章转载自程序媛的梦想,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论