0738-单调递增的数字

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

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

示例 1:

输入: N = 10
输出: 9
示例 2:

输入: N = 1234
输出: 1234
示例 3:

输入: N = 332
输出: 299
说明: N 是在 [0, 10^9] 范围内的一个整数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/monotone-increasing-digits

参考:

python

# 0738.单调递增的数字

class Solution:
    def monotoneIncreasingDigits(self, n: int) -> int:
        """
        朴素求解,暴力解法,通过取模依次取到低位数字,高位数字应该小于等于低位数字
        :param N:
        :return:
        """
        def checkNum(num: int) -> bool:
            """判断单调递增的数字,高位小于等于低位数字"""
            max = 10
            while num :
                t = num % 10
                if max >= t:
                    max = t
                else:
                    return False
                num = num // 10
            return True

        for i in range(n, 0, -1):
            if checkNum(i):
                return i
        return 0

class Solution1:
    def monotoneIncreasingDigits(self, n: int) -> int:
        """
        由后向前遍历,后面的可以用上,如98,由于9大于8,9-1变8,同时个位8变9,此时就是最大的递增数字
        或者如332,由于十位3大于个位2,十位变2,个位变9,同理百位变2,十位2变9,最后就是299
        :param n:
        :return:
        """
        num_list = list(str(n))
        for i in range(len(num_list)-1, 0, -1):
            if int(num_list[i]) < int(num_list[i-1]):
                num_list[i-1] = str(int(num_list[i-1])-1)
                num_list[i:] = "9" * (len(num_list)-i)
        return int("".join(num_list))


if __name__ == "__main__":
    test = Solution()
    print(test.monotoneIncreasingDigits(332))


golang

package greedy

import (
	"strconv"
)


// 贪心算法
func monotoneIncreasingDigits(n int) int {
	stringNum := strconv.Itoa(n)
	// bytes类型的值为对应ascii的对应数
	strNumArr := []byte(stringNum) // go中string不可变类型,转为数组方便更改
	length := len(strNumArr)
	if length <= 1 {
		return n
	}
	for i:=length-1;i>0;i-- {
		if strNumArr[i-1] > strNumArr[i] {
			strNumArr[i-1] -= 1
			for j:=i;j<length;j++ { // 后面的数置为9
				strNumArr[j] = '9'
			}
		}
	}
	res,_ := strconv.Atoi(string(strNumArr))
	return res
}


posted on 2021-11-24 23:03  进击的davis  阅读(34)  评论(0编辑  收藏  举报

导航