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