算法题:单调递增的数字(贪心算法解决序列问题)

这道题参考了一位网友的思路,采用了贪心算法+动态规划,具体思路如下:(完整题目附在了最后面)

1、从高到低遍历数字的每个位数,找到第一个数值递减(<)的地方,把当前位-1,后面的位全部置为9。

2、重复步骤1数次,直到数字位数从高到低的数值呈现递增(>=),就得到了我们要的结果。

代码如下:

复制代码
class Solution(object):

    def dp(self, nums):
        for i in range(len(nums) - 1):
            if nums[i + 1] < nums[i]:
                nums[i] = str(int(nums[i]) - 1)
                for j in range(i + 1, len(nums)):
                    nums[j] = '9'
                return self.dp(nums)
        return nums

    def monotoneIncreasingDigits(self, n):
        n = list(str(n))
        return int(''.join(self.dp(n)))

if __name__ == '__main__':
    sol = Solution()
    print(sol.monotoneIncreasingDigits(1234321))
    # print(sol.monotoneIncreasingDigits(10))

完整题目:

738. 单调递增的数字

当且仅当每个相邻位数上的数字 xy 满足 x <= y 时,我们称这个整数是单调递增的。

给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增

示例 1:

复制代码
输入: n = 10
输出: 9

示例 2:

复制代码
输入: n = 1234
输出: 1234

示例 3:

复制代码
输入: n = 332
输出: 299

提示:

  • 0 <= n <= 10^9
相关推荐
一切皆是因缘际会3 小时前
从概率拟合到内生心智:2026 下一代 AI 架构演进与落地实践
人工智能·深度学习·算法·架构
Java成神之路-3 小时前
【LeetCode 刷题笔记】34. 在排序数组中查找元素的第一个和最后一个位置 | 二分查找经典刷题题解
算法·leetcode
不忘不弃3 小时前
用BFS方法求解平分汽油问题
算法·宽度优先
AI科技星3 小时前
全域数学·72分册·射影原本 无穷维射影几何卷细化子目录【乖乖数学】
人工智能·线性代数·算法·机器学习·数学建模·数据挖掘·量子计算
风落无尘3 小时前
《智能重生:从垃圾堆到AI工程师》——第四章 变化的艺术
人工智能·线性代数·算法
七颗糖很甜3 小时前
电离层对地基雷达测量精度的影响分析与校正方法
python
JAVA面经实录9173 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
AC赳赳老秦3 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
WBluuue4 小时前
Codeforces 1093 Div2(ABCD1D2)
c++·算法
浅念-4 小时前
「一文吃透 BFS:从层序遍历到锯齿形、最大宽度、每层最大值」
数据结构·算法