leetcode_869 重新排序得到 2 的幂

60 阅读1分钟

要求

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

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

示例 1:

输入:1
输出:true

示例 2:

输入:10
输出:false

示例 3:

输入:16
输出:true

示例 4:

输入:24
输出:false

示例 5:

输入:46
输出:true

提示:

  • 1 <= N <= 10^9

核心代码

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

image.png

解题思路:我们将1 * 10 ** 9之内的所有的2的幂全部整理出来,然后我们使用Counter将其变成字典的格式,每个数字的次数都是1,只是为了我们的n进行不断移位(对n进行数量统计)看是否满足我们的统计结果,这个题的思路比较好,值得学习。