题目描述:
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
实例:
输入:1 输出:true
输入:24 输出:false
输入:46 输出:true (注: 46不是2的幂,将4和6重新排序得到64, 64为2的幂,所以返回True)
思路解析:
本文可以从两个方面进行考虑
1.判断一个数字是否是2的幂。
2.把数字进行字符串转换,然后进行排列组合,可以考虑使用递归。
代码:
def isPowerOfTwo(n: int) -> bool:
return (n & (n - 1)) == 0
class Solution:
def reorderedPowerOf2(self, n: int) -> bool:
nums = sorted(list(str(n)))
m = len(nums)
vis = [False] * m
def backtrack(idx: int, num: int) -> bool:
if idx == m:
return isPowerOfTwo(num)
for i, ch in enumerate(nums):
# 不能有前导零
if (num == 0 and ch == '0') or vis[i] or (i > 0 and not vis[i - 1]
and ch == nums[i - 1]):
continue
vis[i] = True
if backtrack(idx + 1, num * 10 + ord(ch) - ord('0')):
return True
vis[i] = False
return False
return backtrack(0, 0)
该博客讨论了如何确定一个整数是否可以通过重新排序其数字来形成2的幂。提出了两种思路,一是检查数字是否本身就是2的幂,二是通过回溯算法遍历所有可能的数字排列。提供的代码实现中,首先判断给定数字是否为2的幂,然后使用回溯法尝试所有可能的排序,如果找到一种排序使得排序后的数字是2的幂,则返回true,否则返回false。
242

被折叠的 条评论
为什么被折叠?



