869. 重新排序得到2的幂(Python)

难度:★★★☆☆
类型:数组
方法:数学

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

题目

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

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

示例 1:

输入:1
输出:true

示例 2:

输入:10
输出:false

示例 3:

输入:16
输出:true

示例 4:

输入:24
输出:false

示例 5:

输入:46
输出:true

提示:

1 <= N <= 10^9

解答

我们可以把1e9范围内所有32个2的幂准备好,并统计各自各个数字出现次数,如果新来的数字N中各个数字出现的次数与2的幂列表中匹配,则说明通过一定的组合方式可将N转化为2的幂。

from collections import Counter


class Solution:
    def reorderedPowerOf2(self, N: int) -> bool:
        two_powers = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824]
        two_powers = [Counter(str(i)) for i in two_powers]
        return Counter(str(N)) in two_powers

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

你可能感兴趣的:(869. 重新排序得到2的幂(Python))