【LeetCode】738. 单调递增的数字
738. 单调递增的数字
知识点:字符串;贪心
题目描述
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
示例
输入: N = 10
输出: 9
输入: N = 1234
输出: 1234
输入: N = 332
输出: 299
解法一:贪心
想一下这个过程,如果比前一位大的话那就可以不用动直接返回;如果比前一位小的话例如98,应该怎么做呢,我们取小于等于8的都没用,因为都比前一位要小,不满足递增,所以只能让前一位变小一位了,9变成8,那我们最后一位自然要取到9,高位数和这个二位数一个道理,只要有比前一位小的了,那自然要把前一位-1,后面所有位变为9;
但是还有一点要注意,比如332,我们找到2小了,那把前一位减1了,但是减完之后自己又比更前一位的小了,所有更前一位也得减1;只要自己前面减1了,那自己就不用管了,赋成9就行,所以还要找到减完之后仍然满足递增的那个位置;
所以这道题是在找两个位置
- 往后找:第一个比前一位小的位置;
- 往前找:往前开始-1后第一个仍然满足递增的位置;
class Solution {
public int monotoneIncreasingDigits(int n) {
char[] str = Integer.toString(n).toCharArray(); //转换成字符数组方便操作,注意这个方法;
int i = 1;
while(i < str.length && str[i] >= str[i-1]){
i++; //往后找:找到第一个比前一位小的元素;
}
if(i < str.length){
while(i > 0 && str[i] < str[i-1]){
str[i-1]--; //往前找:前一位-1后可能又比更前一位小了,所以循环往前找到满足递增的;
i--;
}
for(i += 1; i < str.length; i++){
str[i] = '9'; //后面全是9就可以了;
}
}
return Integer.parseInt(new String(str)); //字符数组转成字符串,再转成数组;
}
}
体会
要学会整形转字符串,转字符数组:Integer.toString(n).toCharArray();
要学会字符数组转字符串,转整形:Integer.parseInt(new String(str));
【LeetCode】738. 单调递增的数字的更多相关文章
- Java实现 LeetCode 738 单调递增的数字(暴力)
738. 单调递增的数字 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= ...
- [Swift]LeetCode738. 单调递增的数字 | Monotone Increasing Digits
Given a non-negative integer N, find the largest number that is less than or equal to Nwith monotone ...
- [LeetCode] 738. Monotone Increasing Digits 单调递增数字
Given a non-negative integer N, find the largest number that is less than or equal to N with monoton ...
- [LeetCode] Monotone Increasing Digits 单调递增数字
Given a non-negative integer N, find the largest number that is less than or equal to N with monoton ...
- [LeetCode] 926. Flip String to Monotone Increasing 翻转字符串到单调递增
A string of '0's and '1's is monotone increasing if it consists of some number of '0's (possibly 0), ...
- [LeetCode] Increasing Subsequences 递增子序列
Given an integer array, your task is to find all the different possible increasing subsequences of t ...
- [Swift]LeetCode926. 将字符串翻转到单调递增 | Flip String to Monotone Increasing
A string of '0's and '1's is monotone increasing if it consists of some number of '0's (possibly 0), ...
- nyoj 单调递增子序列(二)
单调递增子序列(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长 ...
- 领扣(LeetCode)单调数列 个人题解
如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j,A[i]> = ...
随机推荐
- Docker_CICD笔记
1 环境说明 1.1 机器配置 主机名称 IP地址 系统版本/内存/cpu核数/硬盘 安装软件 controlnode 172.16.1.70/24 centos7.4/4/2/60 docker.d ...
- 16、编译安装ansible
16.1.python版本说明: Ansible是一种批量部署工具,现在运维人员用的最多的三种开源集中化管理工具有:puppet,saltstack,ansible,各有各的优缺点, 其中saltst ...
- HDU 4821 2013长春现场赛hash
题意: 一个字符串S 问其中有几个子串能满足以下条件: 1.长度为M*L 2.可以被分成M个L长的小串 每个串都不一样 分析: hash方法,一个种子base,打表出nbase[i]表示base的 ...
- Cent OS下安装JDK11
自己云服务器以前装了个JDK1.7,最近发现出了jdk11,所以修改一下JDK版本: 我这里用的是Xshell和XFtp工具,下载地址:https://www.netsarang.com/downlo ...
- Python 类与对象 __init__()参数
创建类Person 1 class Person: 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 pas ...
- DawgCTF wp(re和crypto)
简单写写思路,想看详解的..我脚本有些丢失了..师傅请移步. 挂了个vpn,算正式打这种国际赛,全是英文.上去打了两天,昨晚晚上划水了一晚上补作业...,re那时候写出来三道,Potentially ...
- Flask(11)- 操作 Cookie
前言 Cookie 详解:https://www.cnblogs.com/poloyy/p/12513247.html 这一节来瞧一瞧如何用 Flask 操作 Cookie 接下来就是 实战栗子!!! ...
- DEV C++5.11编译没有结果提示
点击"视图"菜单--选择"浮动报告 窗口"
- C语言:位域详解
有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可.例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.正是基于这种考虑,C语言又提供了一种叫做位域 ...
- 一、Java预科学习
1.1.什么是计算机 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现 ...