当前位置: 首页 > news >正文

力扣(单调递增的数字)

738. 单调递增的数字

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

给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。

思路:

对于x和y,如果x>y,则令x-1,y以及后面的数字都变成9,这样就是在不大于该数字的情况下的最大的数字。特殊情况:若形式上有--------xxxxxy---,此时x>y,如果把和y相邻的x变小,则前面会出现xxxx(x-1)99999----,则又出现了不符合的情况,因此应该把最前面的x减小一,把后面的数字都变成9.之所以最前面的数字减小1以后仍然满足条件,是因为此处的是相同数字里最前面的一个,在它之前的数字一定是小于它不能是等于它,因此减一以后最多是等于不会是小于,所以可以。

class Solution {
public:int monotoneIncreasingDigits(int n) {//不匹配的时候,减一变九if(n==0)return 0;vector<int>ap;int n1=n;while(n1>0){ap.push_back(n1%10);n1/=10;}for(int i=ap.size()-1;i>=1;i--){if(ap[i]>ap[i-1]){   //找到相同数字里最前面那个位置,因为可能存在连续相同数字,减一以后前面不满足关系,但是相同数字最前面那个减一,仍然是符合关系的,因为是相同的最前面的一个,因此和其前面的一定是小于关系,减一最差也是等于,不会出现大于,因此可以while(i+1<ap.size()&&ap[i]==ap[i+1])i++;for(int j=0;j<i;j++)ap[j]=9;ap[i]--;break;}}n1=0;for(int i=ap.size()-1;i>=0;i--){n1=n1*10+ap[i];}return n1;}
};


http://www.mrgr.cn/news/12992.html

相关文章:

  • AtCoder Beginner Contest 368 题ABCD详细题解(C++,Python)
  • 无法验证 Anaconda 仓库证书
  • rk3568 Android12 增加 USB HOST 模式开关
  • WPF 手撸插件 七 日志记录(二)
  • 协同过滤推荐算法:个性化推荐的基石
  • 速盾:服务器接入cdn后上传图片失败怎么解决?
  • 【python】懂车帝字体反爬逐层解密案例(附完整代码)
  • JS学习大纲
  • react面试题四
  • android selinux报avc denied权限和编译报neverallow解决方案
  • 论文阅读笔记:RepViT: Revisiting Mobile CNN From Vit Perspective
  • Linux C创建进程及父子进程虚拟地址空间(附源码)
  • 通过python解决原神解密
  • Stable Diffusion的微调方法原理总结
  • cordova手动更新
  • 前端实现模块懒加载
  • 有哪些内部知识库类似钉钉,满足企业多样化需求?
  • Oracle 11g数据库与某个表的最新一笔记录进行关联
  • go国内源设置
  • 16岁激活交学费银行卡需要本人实名电话卡,线下营业厅不给办,怎么办?