day 1: 738. 单调递增的数字

2024-05-24 19:28
文章标签 递增 day 数字 单调 738

本文主要是介绍day 1: 738. 单调递增的数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

738. 单调递增的数字

当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。

示例1
输入:n = 10
输出:9
示例2
输入:n = 1234
输出:1234

为了便于修改值,将其转化为数组。

List<Integer> nums = new ArrayList<Integer>();
while (n > 0) {nums.add(0, n % 10);n /= 10;
}

从高位到低位单调递增,从 0 开始判断,是否是递增的,当判断第 i 位小于第 i - 1位时,将从第 i 位到最后一位修改为 9,并将第 i - 1 位减 1。
此时,第 i - 1 位减 1 后,可能会破坏前面 0 ~ i - 1 的递增,需要往前进行处理,从 i - 1 开始往前遍历,如果第 j 位大于等于第 j - 1 位,就不用继续往前判断了,前面一定是符合的,如果小于,就将第 j 位修改为 9,并将第 j - 1 位减一,减一就需要继续判断前面的递增。

for (int i = 1; i < nums.size(); i++) {if (nums.get(i) < nums.get(i - 1)) {// 往后变为 9for (int j = i; j < nums.size(); j++) {nums.set(j, 9);}// 往前检查nums.set(i - 1, nums.get(i- 1) - 1);for (int j = i - 1; j > 0; j--) {if (nums.get(j) >= nums.get(j - 1)) {break;}nums.set(j, 9);nums.set(j - 1, nums.get(j - 1) - 1);}break;}
}

最后将数组转换为数字输出。

int res = 0;
for (Integer num : nums) {res = res * 10 + num;
}

完整代码

class Solution {public int monotoneIncreasingDigits(int n) {List<Integer> nums = new ArrayList<Integer>();while (n > 0) {nums.add(0, n % 10);n /= 10;}for (int i = 1; i < nums.size(); i++) {if (nums.get(i) < nums.get(i - 1)) {// 往后变为 9for (int j = i; j < nums.size(); j++) {nums.set(j, 9);}// 往前检查nums.set(i - 1, nums.get(i- 1) - 1);for (int j = i - 1; j > 0; j--) {if (nums.get(j) >= nums.get(j - 1)) {break;}nums.set(j, 9);nums.set(j - 1, nums.get(j - 1) - 1);}break;}}int res = 0;for (Integer num : nums) {res = res * 10 + num;}return res;}
}

这篇关于day 1: 738. 单调递增的数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/999310

相关文章

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

POJ1631最长单调递增子序列

最长单调递增子序列 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;publ

Linux基础入门 --9 DAY

文本处理工具之神vim         vi和vim简介 一、vi编辑器 vi是Unix及类Unix系统(如Linux)下最基本的文本编辑器,全称为“visual interface”,即视觉界面。尽管其名称中包含“visual”,但vi编辑器实际上工作在字符模式下,并不提供图形界面。vi编辑器以其强大的功能和灵活性著称,是Linux系统中不可或缺的工具之一。 vi编辑器具有三种主要的工作模

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人