【教3妹学编程-算法题】需要添加的硬币的最小数量

3妹 :2哥2哥,你有没有看到新闻, 有人中了2.2亿彩票大奖!
2哥 : 看到了,2.2亿啊, 一生一世也花不完。
3妹 :为啥我就中不了呢,不开心呀不开心。
2哥 : 得了吧,你又不买彩票,还是脚踏实地的好~
3妹 :小富靠勤,中富靠德,大富靠命, 可能是我命不好。
2哥 : 哎,想我口袋只有几个硬币,叮咚作响。
3妹:说到硬币, 我今天看到一个关硬币的题目,让我也来考考你吧~

题目:

如果整数 x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。

给你一个整数 n ,请你返回 严格大于 n 的 最小数值平衡数 。

示例 1:

输入:n = 1

输出:22

解释:

22 是一个数值平衡数,因为:

  • 数字 2 出现 2 次
    这也是严格大于 1 的最小数值平衡数。
    示例 2:

输入:n = 1000

输出:1333

解释:

1333 是一个数值平衡数,因为:

  • 数字 1 出现 1 次。
  • 数字 3 出现 3 次。
    这也是严格大于 1000 的最小数值平衡数。
    注意,1022 不能作为本输入的答案,因为数字 0 的出现次数超过了 0 。
    示例 3:

输入:n = 3000

输出:3133

解释:

3133 是一个数值平衡数,因为:

  • 数字 1 出现 1 次。
  • 数字 3 出现 3 次。
    这也是严格大于 3000 的最小数值平衡数。

提示:

0 <= n <= 10^6

思路:

题目给一个整数 n ,要求返回严格大于 n 的最小数值平衡数,我们直接按照题目的要求进行模拟即可。

观察到 0<=n<=10^6 , 我们可能返回的数值平衡数最大是 1224444,这个范围可以在时间要求内找到答案。

我们依次枚举大于 n 的整数,统计所有数字的出现频数,判断是否是数值平衡数即可。

java代码:

复制代码
class Solution {
    public int nextBeautifulNumber(int n) {
        for (int i = n + 1; i <= 1224444; ++i) {
            if (isBalance(i)) {
                return i;
            }
        }
        return -1;
    }

    private boolean isBalance(int x) {
        int[] count = new int[10];
        while (x > 0) {
            count[x % 10]++;
            x /= 10;
        }
        for (int d = 0; d < 10; ++d) {
            if (count[d] > 0 && count[d] != d) {
                return false;
            }
        }
        return true;
    }
}
相关推荐
JieE21220 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack201 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫2 天前
Electron 系列文章封面图
算法·架构·前端框架