Leetcode--738. 单调递增的数字

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

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

示例 1:

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

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

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

思路:

如果a[i]一直大于等于a[i-1],直接输出就好

如果不是,需要判断,主要分两种情况:

1.如果a[i]<a[i-1]并且a[i-1]>a[i-2],则a[i-1]-=1,后面的都变为9

例如:123453->123449

2.如果a[i]<a[i-1]并且a[i-1]>=a[i-2],则一直向前遍历,直到a[k]!=a[i-1],然后a[k]-=1,h后面的都变为9

例如:123332->122999

提交的代码:

class Solution {

    public int monotoneIncreasingDigits(int N) {

        int t,sum=0,i=0,n=1,b;

            int a[] = new int[12];

            t = N;

            while(t!=0)

            {

                t = t/10;

                i++;

            }

            t = N;

            b=i;

            while(t!=0)

            {

                a[i-1] = t%10;

                t = t/10;

                i--;

            }

            t=0;

            sum = a[0];

            for(i =0;i<b;i++)

            {

                if(i>0)

                {

                    if(a[i]>=a[i-1])

                    {

                        sum = sum*10+a[i];

                        if(a[i]==a[i-1])

                        {

                            n++;  //n用来记录有多少个连续相同的数字

                        }

                        else

                        {

                            n=1;

                        }

                        continue;

                    }

                    else

                    {

                        while(n!=0)

                        {

                            sum = sum-a[i-1-t];

                            sum = sum/10;

                            t++;

                            n--;

                            //System.out.println(sum);

                        }

                        a[i-t] = a[i-t] - 1;

                        sum = sum*10+a[i-t];

                       // System.out.println(sum);

                        for(int j=i-t+1;j<b;j++)

                        {

                            a[j] = 9;

                            sum = sum*10+a[j];

                        }

                        break;

                    }

                }

            }

            return sum;

    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux ps进程管理命令,Linux 进程管理命令之ps

这个命令会显示某一时刻系统的进程状态。ps是通过/proc接口&#xff0c;让管理员查看内核进程状态信息。为了响应一切皆文件&#xff0c;进程参数模拟成文件系统类型(文件)&#xff0c;参数路径模拟成目录/proc/# 每个进程都有一个进程ID号这个目录里存放的各种进程的状态信息启…

你必须搞清楚的String,StringBuilder,StringBuffer

String,StringBuilder 以及 StringBuffer 这三个类的关系与区别一直是 Java 的经典问题&#xff0c;这次就来讲一下关于这三个类的一些知识 一. 简单对比 String &#xff1a; 字符常量StringBuilder &#xff1a; 字符变量StringBuffer &#xff1a; 字符变量String 属于常量类…

2020年中国智慧城市发展值得关注的技术

文章来源&#xff1a;Gartner图片来源&#xff1a;网络每年Gartner发布的技术成熟度曲线&#xff08;The Hype Cycle&#xff09;报告都备受市场瞩目&#xff0c;也成为政府及企业做出重大投资决策的风向标。其原因在于&#xff0c;它不仅能够让CIO了解到年度最备受瞩目和极具商…

序列化,反序列化

今天看ArrayList的源代码&#xff0c;发现了里面的一个关键字transient 然后查了一下&#xff0c;发现这个关键字是用来防止序列化的 那什么是序列化呢&#xff1f;我又懵逼了 为什么需要序列化&#xff1f; 在当今的网络社会&#xff0c;我们需要在网络上传输各种类型的数…

腾讯研究院发布《2021数字科技前沿应用趋势》

来源 &#xff1a;腾讯研究院编辑&#xff1a; 陈近梅2021年1月9日&#xff0c;在腾讯研究院举办的“腾讯科技向善暨数字未来大会2021”上&#xff0c;《变量&#xff1a;2021数字科技前沿应用趋势》报告正式发布。该报告由腾讯研究院发起&#xff0c;先后访谈业界权威专家&…

linux导入pgsql日志目录,Centos下PostgreSQL安装及修改数据目录

记录下在Centos7.6 安装PostgreSQL数据库&#xff0c;版本10.12的过程&#xff0c;第一次装&#xff0c;遇到的坑太多了&#xff0c;网上教程坑也多&#xff0c;有的版本不一样方法不一样。花了半天时间…背景&#xff1a;内网服务器&#xff0c;搭了个sonarqube代码审计系统&a…

ArrayList的容量

ArrayList当容量放不下元素时&#xff0c;容量会自动扩大 那么如果把元素移除&#xff0c;容量会自动减小吗&#xff1f; package zhousai; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class test { public static void …

H3 BPM之流程包(流程Demo)导入导出

流程包是什么&#xff1f; 流程包指的是工作流从表单设计到流程设计产生的数据包&#xff0c;所有的表单逻辑和流程模型逻辑数据都包含在里面。由于各种厂商工作流软件运行机制不一样&#xff0c;流程包不支持在不同产品之间导入导出&#xff0c;只支持在同一款工作流软件里面导…

11大改革举措!国家自然科学基金2021年项目指南发布

来源&#xff1a;国家自然科学基金委员会网站编辑&#xff1a;宗华排版&#xff1a;李言1月15日&#xff0c;国家自然科学基金委员会网站更新了2021年度项目指南。点击链接进入&#xff1a;2021年项目指南未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&…

服务器win和linux系统安装教程,Win+linux双系统安装

导读如果你要安装linux系统&#xff0c;但是又不想换掉Win7的操作习惯&#xff0c;建议安装WinLinux双系统&#xff0c;随你个人喜好。下面介绍的是用U盘安装的方法。笔者使用的是华硕FX50J装的双系统&#xff0c;之前使用过Dell的游闸安装过&#xff0c;但是没有碰到那么多问题…

Servlet API

Servlet API:由两个软件包组成&#xff1a;对应于HTTP协议的软件包&#xff0c;对应于除HTTP协议以外的软件包 即Servlet API 可以适用于任何通信协议 我们学习的Servlet&#xff0c;是位于javax.servlet.http包中的类和接口&#xff0c;是基础HTTP协议 Servlet继承关系&…

hibernate框架学习之使用SQLQuery查询数据

SQLQuery对象的获取  Hibernate支持使用原生SQL语句进行查询&#xff0c;通过session对象获得SQLQuery对象进行&#xff0c;需要传入SQL语句  SQLQuery createSQLQuery(String sqlStr)  SQLQuery query session.createSQLQuery(“select * from tbl_user");sqlStr是…

Leetcode--135. 发糖果

老师想给孩子们分发糖果&#xff0c;有 N 个孩子站成了一条直线&#xff0c;老师会根据每个孩子的表现&#xff0c;预先给他们评分。 你需要按照以下要求&#xff0c;帮助老师给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。 相邻的孩子中&#xff0c;评分高的…

Linux下载cfg命令,Linux安装详解-配置ks.cfg实现自动安装过程

之前发过一篇关于通过PXE实现Linux批量无人值守自动安装的文章(可以参考http://www.linuxidc.com/Linux/2011-08/39949.htm)&#xff0c;不过写的只是具体的配置和操作&#xff0c;对于原理部分没有说明&#xff0c;最近通过一段时间的学习&#xff0c;把linux的启动安装过程深…

人类如何接近“宇宙无限”?微积分的力量无处不在

来源&#xff1a;遇见数学距离2021年高考还有不到两百天&#xff0c;当无数高中生还在为千军万马过独木桥儿紧锣密鼓准备之时&#xff0c;有部分初中生却已经一只脚踏入了清华大学的校门。2020年的最后一天&#xff0c;清华大学发布官方通知&#xff0c;将启动“丘成桐数学科学…

linux如何运行synaptic,Linux_Ubuntu 7.04 Synaptic软件包管理器功能,Ubuntu的新立得软件包管理器(Syn - phpStudy...

Ubuntu 7.04 Synaptic软件包管理器功能Ubuntu的新立得软件包管理器(Synaptic Package Manager)是APT(Advanced Package Tool)的图形界面&#xff0c;非常直观易用。但有时候是用文字模式远程登录到Ubuntu&#xff0c;或者安装的是Server版的Ubuntu&#xff0c;再或者有什么其它…

三层架构

1.三层架构 与MVC设计模式的目标一致&#xff0c;都是为了 解耦合&#xff0c;提高代码复用 区别&#xff1a;二者对项目理解的角度不同 2.三层组成&#xff1a; 表示层(USL,User Show Layer;视图层) 业务逻辑层(BLL,Business Logic Layer;Service层) 数据访问层(DAL,Dat…

这10个著名的思想实验,竟然是物理学家完成的

来源 &#xff1a; 知更社区在物理学中&#xff0c;有一类特殊的实验&#xff1a;它们不需要购置昂贵的仪器&#xff0c;不需要大量的人力物力&#xff0c;需要的只是有逻辑的大脑&#xff1b;而这种实验却可以挑战前人的结论&#xff0c;建立新的理论&#xff0c;甚至引发人们…

怎样查看Jdk是32位还是64位

怎样查看Jdk是32位还是64位、、 ------------- --------------- ------------- 其实还可以这样看哦、、 --------------- ------------- ---------------转载于:https://www.cnblogs.com/GaoNa/p/9352283.html

交叉编译及linux简单程序设计,嵌入式实验6交叉编译及Linux简单程序设计实验

实验六交叉编译及Linux简单程序设计实验的实验报告一实验目的1、了解和掌握交叉编译模式和方法&#xff1b;2、熟悉和掌握Linux简单程序设计。二实验环境预装Fedora10_A8_Linux的pc机一台&#xff0c;CVT-A8嵌入式实验箱一台(已构建嵌入式Linux系统)&#xff0c;以太网线一根&a…