题目
如果整数
x
满足:对于每个数位d
,这个数位 恰好 在x
中出现d
次。那么整数x
就是一个 数值平衡数 。给你一个整数
n
,请你返回 严格大于n
的 最小数值平衡数 。
0 <= n <= 106
解题思路
- 根据n的最大值可以得知最大n的最小数值平衡数;
- 从n+1开始遍历并判断是否为数值平衡树;
代码展示
java
class Solution {
public int nextBeautifulNumber(int n) {
//0~10^6 最小平衡数的最大值为为1224444
while (n < 1224444){
n++;
if(isBalance(n)){
return n;
}
}
return -1;
}
public boolean isBalance(int num){
String str = String.valueOf(num);
Map<Integer,Integer> data = new HashMap<>();
for (int i = 0; i < str.length(); i++){
int temp = str.charAt(i) - 48;
data.put(temp, data.getOrDefault(temp, 0) + 1);
}
for (Integer i : data.keySet()){
if(!Objects.equals(data.get(i), i)){
return false;
}
}
return true;
}
}