2048. Next Greater Numerically Balanced Number
题目简介
/**
* @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
}