1.题目
如果整数 x
满足:对于每个数位 d
,这个数位 恰好 在 x
中出现 d
次。那么整数 x
就是一个 数值平衡数 。
给你一个整数 n
,请你返回 严格大于 n
的 最小数值平衡数 。
2.思路
这题它给n范围是0-10^6,因此咱们可以考虑暴力枚举。那怎么暴力枚举呢?根据题目的要求,咱们可以用一种数据结构——哈希表,咱们用哈希表来存储整数x的每位数字出现的次数,然后进行判断。
这里咱们用python来解题,可以用python的一个内置库collections库,这个库里面有一个类——Counter,这个类可以统计字符串、列表等迭代类型中每个元素出现的次数。然后咱们利用python的语法all关键字来进行最终判断。
3.代码
class Solution:
def nextBeautifulNumber(self, n: int) -> int:
start = n + 1 # 从n+1开始进行遍历
# 定义一个死循环
while True:
# 先将int类型转为str类型,然后用Counter类进行统计
count = Counter(str(start))
# all 关键字可以判断里面的值是否都为True
if all(count[d] == int(d) for d in count):
return start # 返回最终结果
start += 1