1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| #include<iostream> #include<map> #include<algorithm>
class Solution { public: int nextBeautifulNumber(int n) { using namespace std; map<int, int> m; int i = ++n;
while (true) { bool flag = true; map<int, bool> temp; while (i > 0) { if (i % 10 == 0) { flag = false; break; } if (temp[i % 10] == false) { temp[i % 10] = true; m[i % 10] = i % 10 - 1; } else { m[i % 10]--; } i /= 10; }
for (int j = n; j > 0; j /= 10) { if (m[j % 10] != 0) { flag = false; break; } } if (flag) return n; n++; i = n; } } };
int main() { using namespace std; Solution s; for (int i = 0; i < 1000000; i++) { i = s.nextBeautifulNumber(i); cout << i << endl; } return 0; }
class Solution { public: const vector<int> balance { 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 nextBeautifulNumber(int n) { return *upper_bound(balance.begin(), balance.end(), n); } };
|