2048. Next Greater Numerically Balanced Number

Leetcode link

题目简介

/**
 * @param {number} n
 * @return {number}
 */

题目给我们一个数字 n 要求我们求出比 n 大的最小的平衡数

平衡数的定义:这个数字内的每一个数字的数量必须与数字大小一致

举例:333221 就是平衡数、3221 就不是(因为 3 没有 3 个)

解题思路

这题的关键在与这个范围限制:0 <= n <= 10^6

由于比 10^6 更大的平衡数是 1224444,我们不难看出这个是可以通过简单的暴力判断求出的

具体而言我们从 n+1 开始循环,对每个数判断是否是平衡数,返回遇到的第一个平衡数即可

Javascript

/**
 * @param {number} n
 * @return {number}
 */
var nextBeautifulNumber = function (n) {
    for (let i = n + 1; ; i++) {
        if (isBalance(i)) {
            return i
        }
    }
    return -1
};

const isBalance = num => {
    const count = new Array(10).fill(0)
    while (num > 0) {
        count[num % 10]++
        num = Math.floor(num / 10)
    }
    for (let i = 0; i < count.length; i++) {
        if (count[i] > 0 && count[i] !== i) {
            return false
        }
    }

    return true
}

results matching ""

    No results matching ""