LeetCode738☞单调递增的数字

关联LeetCode题号738

本题特点
  • 贪心,贪心在如果非单调递增,则想要保证数字整体最大,那低数位一定为9(所有数字中最大的)
本题思路
  1. 从后向前遍历,如果递增则 什么都不做
  2. 如果非递增,增非递增位置的前一数位需要-1,当前位置需要标记,直到结束
  3. 标记位置后所有位置 都为9必能保证最大值
python写法
class Solution:
    def monotoneIncreasingDigits(self, n: int) -> int:
        nums = list(str(n))
        nums = list(map(lambda x: int(x), nums))
        for i in range(len(nums)-1, 0, -1):
            if nums[i-1] > nums[i]:
                nums[i-1] -= 1
                for j in range(i, len(nums)):
                    nums[j] = 9

        nums = list(map(lambda x: str(x), nums))
        s = "".join(nums)

        return int(s)
Java写法 
    def monotoneIncreasingDigits(self, n: int) -> int:
        nums = list(str(n))
        nums = list(map(lambda x: int(x), nums))
        start= len(nums);
        for i in range(len(nums)-1, 0, -1):
            if nums[i-1] > nums[i]:
                nums[i-1] -= 1
                start = i
                # for j in range(i, len(nums)):
                #     nums[j] = 9
        for j in range(start, len(nums)):
            nums[j] = 9

        nums = list(map(lambda x: str(x), nums))
        s = "".join(nums)

        return int(s)
Java写法
package leetcode;

import org.junit.jupiter.api.Test;

/**
 * File Description: MonotoneIncreasingDigits
 * Author: Your Name
 * Date: 2025/1/2
 */
public class MonotoneIncreasingDigits_738 {
    public int monotoneIncreasingDigits(int n) {
        String s  = String.valueOf(n);
        char[] chars  = s.toCharArray();
        int start  = s.length();
        for(int i=s.length()-2; i >=0; i--){
            if (chars[i] > chars[i + 1]) {
                chars[i]--;
                start = i+1;
            }
        }
        for (int i = start; i < s.length(); i++) {
            chars[i] = '9';
        }

        return Integer.parseInt(String.valueOf(chars));

    }

    @Test
    public void TestMonotoneIncreasingDigits(){

        int res = monotoneIncreasingDigits(332);
        System.out.println(res);
    }
}
Java类型转换

//        Integer.valueOf(12); //自动装箱
//        Double.valueOf(12.9);
//        Integer t = Integer.valueOf(12);
//        int intt = t.intValue();  //自动拆箱
//        String sa = t.toString();
//        int aaa = Integer.parseInt(sa);//String 转成对应的int
          char[] chars = sa.toCharArray();  //字符串转成 字符数组
          String.valueOf(chars);  //将字符数组转成字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值