如果整数 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;}
};