Leetcode.2048 下一个更大的数值平衡数 Rating : 1734
如果整数 x
满足:对于每个数位 d
,这个数位 恰好 在 x
中出现 d
次。那么整数 x
就是一个 数值平衡数 。
给你一个整数 n
,请你返回 严格大于 n
的 最小数值平衡数 。
输入:n = 1
输出:22
解释:
22 是一个数值平衡数,因为:
数字 2 出现 2 次
这也是严格大于 1 的最小数值平衡数。
输入:n = 1000
输出:1333
解释:
1333 是一个数值平衡数,因为:
数字 1 出现 1 次。
数字 3 出现 3 次。
这也是严格大于 1000 的最小数值平衡数。
注意,1022 不能作为本输入的答案,因为数字 0 的出现次数超过了 0 。
输入:n = 3000
输出:3133
解释:
3133 是一个数值平衡数,因为:
数字 1 出现 1 次。
-数字 3 出现 3 次。
这也是严格大于 3000 的最小数值平衡数。
解法:枚举
我们注意到 n
的最大值是10610^6106。所以我们能取到的 最大的数值平衡数位 为 1224444
。
我们从 n + 1
开始枚举,第一个数值平衡数就是答案,最多取到 1224444
。
时间复杂度: O(n)O(n)O(n)
C++代码:
class Solution {
public:int nextBeautifulNumber(int n) {int ma = 1224444;int i = n + 1;for(;i <= ma;i++){int cnt[10] = {};int x = i;while(x){cnt[x % 10]++;x /= 10;}bool ok = true;for(int i = 0;i < 10;i++){if(cnt[i] == 0) continue;if(cnt[i] != i){ok = false;break;}}if(ok) break;}return i;}
};