如果整数 x
满足:对于每个数位 d
,这个数位 恰好 在 x
中出现 d
次。那么整数 x
就是一个 数值平衡数 。
给你一个整数 n
,请你返回 严格大于 n
的 最小数值平衡数 。
如果n的位数是k,n它的下一个大的平衡数一定不会超过 k+1个k+1。
直接遍历之后判断即可。
class Solution {
public:
int nextBeautifulNumber(int n) {
int m=n;
int cnt=0;
while(m){
m/=10; cnt++;
}
vector<int>Bnum(9);
Bnum[0]=0;Bnum[1]=1;Bnum[2]=22;Bnum[3]=333;
Bnum[4]=4444;Bnum[5]=55555;Bnum[6]=666666;Bnum[7]=7777777;Bnum[8]=88888888;
int max_n=Bnum[cnt+1];
int num_cnt[10];
cout<<n<<" "<<max_n;
for(int i=n+1;i<=max_n;i++){
m=i;
memset(num_cnt,0,sizeof(num_cnt));
while(m){
num_cnt[m%10]++;
m/=10;
}
int flag=true;
for(int j=0;j<=9;j++){
if(num_cnt[j]>=1&&num_cnt[j]!=j){
flag=false;
break;
}
}
if(flag)return i;
}
return 0;
}
};