zoukankan      html  css  js  c++  java
  • 单调递增的数字

    题目

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

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

    输入: n=332,  输出 299

    解题思路

    贪心思路
    ①.要使目标数字和 N 最接近,则需要尽可能保持高位数字不动
    ②.若某高位数字减 1,则后续所有低位数字都可直接更改为 9,可保持最接近
    ③.若低位数字更改为 9,则前一高位数字至少得减 1,可保持最接近
    解题步骤
    因此,首先从高位开始找到第一个非升序的位,将此位减 1,后续所有位改为 9;然后从此位开始往前判断看更改后是否满足升序要求,若不满足要求则把本位也提升到 9,前一位继续减 1,直到满足升序。

    代码

    package main
    
    import (
    	"fmt"
    	"strconv"
    )
    
    func monotoneIncreasingDigits(n int) int {
    	s := []byte(strconv.Itoa(n))
    	i := 1
    	for i < len(s) && s[i] >= s[i-1] {
    		i++
    	}
    	if i < len(s) {
    		for i > 0 && s[i] < s[i-1] {
    			s[i-1]--
    			i--
    		}
    		for i++; i < len(s); i++ {
    			s[i] = '9'
    		}
    	}
    	ans, _ := strconv.Atoi(string(s))
    	return ans
    }
    
    func main() {
    	res := monotoneIncreasingDigits(332)
    	fmt.Println(res)
    }
    

      

  • 相关阅读:
    win10家庭版转专业版并激活
    关于vcruntime140D.dll丢失问题
    phpMyAdmin使用教程
    在wamp中直接进入项目
    sublime Text3的使用
    wamp的安装配置
    PHP Web开发入门流程
    PHP与MySQL的亲密接触
    flex 布局 实现电商页面商品展示floor
    html css+div+jquery实现图片轮播
  • 原文地址:https://www.cnblogs.com/smallleiit/p/14137041.html
Copyright © 2011-2022 走看看