本文主要是介绍代码随想录算法训练营第三十七天| 738.单调递增的数字 , 968.监控二叉树 (跳过),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
738.单调递增的数字
- LeetCode
思路: 给定一个数字, 要求返回小于这个数字的最大的单调递增数字, 即每个数字的后一位一定大于或等于前一位。 首先想到如果是两位数, 且前一位大于后一位, 例如 21, 那么首位肯定不能是2 了, 要减去一个变成 1, 后一位只要不是0都满足条件, 那么最大的肯定是9了。 同理 10 -> 09 (但是注意这里开头不能是0). 如果是三位数或者更多位数, 发现前一个数字大于后一个, 例如 321, 首先21是 19, 但是319 不符合条件, 3 > 2, 所以3 要减一, 然后后面的都是99 满足最大的。 所以贪心算法就很明确了。
难点: 理清楚变化的逻辑就可以了
class Solution:def monotoneIncreasingDigits(self, n: int) -> int:if n < 10:return nnums = [*str(n)][::-1]n = len(nums)for i in range(1, n):if nums[i] > nums[i-1]:nums[i] = str(int(nums[i])-1)nums = ['9'] * i + nums[i:]if nums[-1] == '0':nums = nums[:-1]ans = int(''.join(nums[::-1]))return ans
968.监控二叉树 (跳过)
- LeetCode
思路: 这个问题有点难的, 这次就先跳过了, 之后有时间再回过来看。
回顾
代码随想录
这篇关于代码随想录算法训练营第三十七天| 738.单调递增的数字 , 968.监控二叉树 (跳过)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!