- 题目:重新排序得到2的幂(给定整数N,按照任何顺序重新进行排序,找到2的幂返回真) <注意> 要将输入的数重新进行排序
- 求解思路如下(拆解为两个问题):
- 问题1:列举所有包含重复字符的数组的排列
- 问题2:判断当前是否为2的幂
- 完整code
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)
visited = [False] * m#初始化
def Alilst(idx: int, num: int) -> bool:
if idx == m:
return isPowerOfTwo(num)
for i, ch in enumerate(nums):
# 出现前导零的情况
if (num == 0 and ch == '0') or visited[i] or (i > 0 and not visited[i - 1] and ch == nums[i - 1]):
continue
visited[i] = True
if Alilst(idx + 1, num * 10 + ord(ch) - ord('0')):
return True
visited[i] = False
return False
return Alilst(0, 0)