下一个更大的数值平衡数

原题:leetcode 2048.下一个更大的数值平衡数

题目

如果整数x满足:对于每个数位d,这个数位恰好在x中出现d 次。那么整数x就是一个数值平衡数
给你一个整数n,请你返回严格大于n的最小数值平衡数

题解

数据不大,可以打表,也可以直接求。

  • 打表
//打表
class Solution {
public:
    int nextBeautifulNumber(int n) {
        int a[]={1, 22, 122, 212, 221, 333, 1333, 3133, 3313, 3331, 4444, 14444, 22333, 23233, 23323, 23332, 32233, 32323, 32332, 33223, 33232, 33322, 41444, 44144, 44414, 44441, 55555, 122333, 123233, 123323, 123332, 132233, 132323, 132332, 133223, 133232, 133322, 155555, 212333, 213233, 213323, 213332, 221333, 223133, 223313, 223331, 224444, 231233, 231323, 231332, 232133, 232313, 232331, 233123, 233132, 233213, 233231, 233312, 233321, 242444, 244244, 244424, 244442, 312233, 312323, 312332, 313223, 313232, 313322, 321233, 321323, 321332, 322133, 322313, 322331, 323123, 323132, 323213, 323231, 323312, 323321, 331223, 331232, 331322, 332123, 332132, 332213, 332231, 332312, 332321, 333122, 333212, 333221, 422444, 424244, 424424, 424442, 442244, 442424, 442442, 444224, 444242, 444422, 515555, 551555, 555155, 555515, 555551, 666666, 1224444};
        int i=0;
        while(1)
            if(a[i]>n){
                return a[i];break;
            }
            else i++;
    }
};
  • 比较优美简洁的判断。
class Solution {
public:
    bool isnice(int x){
        vector<int> v=vector<int>(10,0);
        while(x){
            v[x%10]++;
            x/=10;
        }
        for(int i=0;i<10;i++){
            if(v[i]!=0&&v[i]!=i) return false;
        }
        return true;
    }
    int nextBeautifulNumber(int n) {
        ++n;
        while(!isnice(n)) n++;
        return n;
    }
};
posted @ 2021-10-27 18:07  Chilyyy  阅读(205)  评论(0)    收藏  举报