乍一看没什么想法,但它的 x 是有限的,而题目规定的数值平衡数的要求很严格,相对来说只有少部分数满足要求,所以想到了枚举的方法
通过寻找所有在范围内的全排列中满足数值平衡数的要求的数,找到最接近 n 的一个
官方给出的解法是直接从n+1开始一个个地寻找数值平衡数,代码更简洁,也更快,哭死
classSolution:defnextBeautifulNumber(self, n:int)->int:
l =[]
ans = inf
defbuild(x, nums, deep):nonlocal ans
cnt =0for i inrange(1,7):if nums[i]== i or nums[i]==0:
cnt +=1if nums[i]> i or deep >7or nums[i]>0and i - nums[i]>7- deep:returnif cnt ==6:if x > n:
ans =min(ans, x)
l.append(x)for i inrange(1,7):
nums[i]+=1
build(x + i *10**deep, nums, deep +1)
nums[i]-=1
build(0,[0]*7,0)return ans