869. 重新排序得到 2 的幂

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

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

 

示例 1:

输入:1
输出:true
示例 2:

输入:10
输出:false
示例 3:

输入:16
输出:true
示例 4:

输入:24
输出:false
示例 5:

输入:46
输出:true
 

提示:

1 <= N <= 10^9

思路:

①注意到输入N的范围为1~10000000000,而其中2的幂数量并不多,直接穷举范围内所有2的幂.

②将所有数值转化为字符串比较,省去麻烦的穷举数字组合,将字符串排序后直接进行比对,如果能完全相等,说明输入N能通过排列组合生成2的幂

 

 1 class Solution(object):
 2     def reorderedPowerOf2(self, n):
 3         """
 4         :type n: int
 5         :rtype: bool
 6         """
 7         sets = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144,
 8                 524288,
 9                 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912]
10         str_sets = [str(i) for i in sets]
11         len_str_sets = [len(i) for i in str_sets]
12 
13         str_n = str(n)
14         len_n = len(str_n)
15         srt_n = sorted(str_n)
16 
17         for i in range(len(len_str_sets)):
18             if len_str_sets[i] == len_n:
19                 if sorted(str_sets[i]) == srt_n:
20                     return True
21         return False

 

posted @ 2021-10-28 09:36  散装英语king  阅读(48)  评论(0编辑  收藏  举报