0869. 重新排序得到 2 的幂
大约 2 分钟
---
0869. 重新排序得到 2 的幂
- 标签:哈希表、数学、计数、枚举、排序
- 难度:中等
题目链接
题目大意
描述:
给定正整数 ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
要求:
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
说明:
- 。
示例:
- 示例 1:
输入:n = 1
输出:true- 示例 2:
输入:n = 10
输出:false解题思路
思路 1:计数 + 枚举
判断一个数能否重新排列成 2 的幂,关键在于判断它的数字组成是否与某个 2 的幂相同。
由于 ,所以 2 的幂最多到 。我们可以:
- 统计 中每个数字出现的次数。
- 枚举所有在范围内的 2 的幂 ()。
- 统计每个 2 的幂中各数字出现的次数。
- 如果某个 2 的幂的数字计数与 的数字计数完全相同,返回
True。
思路 1:代码
class Solution:
def reorderedPowerOf2(self, n: int) -> bool:
# 统计 n 中每个数字出现的次数
def count_digits(num):
cnt = [0] * 10
while num > 0:
cnt[num % 10] += 1
num //= 10
return cnt
n_count = count_digits(n)
# 枚举所有可能的 2 的幂(2^0 到 2^29)
for i in range(30):
power = 1 << i # 2^i
if count_digits(power) == n_count:
return True
return False思路 1:复杂度分析
- 时间复杂度:,其中 。统计 的数字需要 ,枚举 30 个 2 的幂并统计数字需要 。
- 空间复杂度:,只需要常数大小的数组来存储数字计数。