这道题参考了一位网友的思路,采用了贪心算法+动态规划,具体思路如下:(完整题目附在了最后面)
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. 单调递增的数字
当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
给定一个整数 n
,返回 小于或等于 n
的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10 输出: 9
示例 2:
输入: n = 1234 输出: 1234
示例 3:
输入: n = 332 输出: 299
提示:
0 <= n <= 10^9