Next Greater Numerically Balanced Number

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution:
    def nextBeautifulNumber(self, n: int) -> int:
        self.cnt = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

        def dfs(n, val, sz):
            if sz == 0:
                for i in range(1, 10):
                    if (self.cnt[i] != i and self.cnt[i] != 0):
                        return 0
                return val if val > n else 0

            res = 0
            for i in range(1, 10):
                if res == 0 and self.cnt[i] > 0 and self.cnt[i] <= sz:
                    self.cnt[i] -= 1
                    res = dfs(n, val * 10 + i, sz - 1)
                    self.cnt[i] += 1
            return res

        sz = len(str(n))
        return dfs(n, 0, sz) or dfs(0, 0, sz + 1)