738. 单调递增的数字-深度优先遍历方法
2023-09-14 09:06:49 时间
738. 单调递增的数字
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10
输出: 9
示例 2:
输入: n = 1234
输出: 1234
示例 3:
输入: n = 332
输出: 299
这题博主做法也是很有新意,感兴趣可以学习一下,解题代码如下:
int length(int n,int *re){
int len=0;
while(n){
re[len]=n%10;
n=n/10;
len++;
}
return len;
}
void reverse(int *re,int len){
for(int i=0;i<len/2;i++){
int t=re[i];
re[i]=re[len-i-1];
re[len-i-1]=t;
}
}
int find;
void dfs(int *re,int len,int now_pos,int pre,int *re_s,long long now_val,long long targe_val){
if(now_pos==len){
find=1;
}
if(find==0){
int i;
if(now_val<targe_val){
i=9;
}
else{
i=re[now_pos];
}
for(;i>=0;i--){
if(i>=pre&&find==0){
re_s[now_pos]=i;
now_val=now_val*10+i;
targe_val=targe_val*10+re[now_pos];
dfs(re,len,now_pos+1,i,re_s,now_val,targe_val);
}
}
}
}
int monotoneIncreasingDigits(int n){
int *re=(int *)malloc(sizeof(int)*10);
int *re_s=(int *)malloc(sizeof(int)*10);
int len=length(n,re);
reverse(re,len);
find=0;
int re_ts=0;
dfs(re,len,0,-1,re_s,0,0);
for(int i=0;i<len;i++){
re_ts=re_ts*10+re_s[i];
}
return re_ts;
}
相关文章
- 二叉搜索树的遍历方式
- Redis中遍历大数据量的key:keys与scan命令
- iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
- 在Pandas Dataframe中遍历行的不同方法
- java实现遍历树形菜单方法——OpenSessionView实现
- java实现遍历树形菜单方法——service层
- java实现遍历树形菜单方法——Dao层
- java实现遍历树形菜单方法——实体类VoteTree
- java实现遍历树形菜单方法——设计思路【含源代码】
- Struts标签<s:iterator>遍历访问复杂Map对象
- 字典遍历
- Java实现 LeetCode 566 重塑矩阵(遍历矩阵)
- ts 遍历Class上的属性和方法
- Java中如何遍历Map对象的4种方法
- python 二叉树类及其四种遍历方法
- C++ vector容器的多种遍历方式
- Leetcode0005. 最长回文子串(medium, 枚举遍历,动态规划)
- MFC Windows 程序设计[289]之文件查找与遍历(附源码)
- 6-2 邻接表存储图的广度优先遍历
- 遍历获取Xml子节点值
- 遍历QMap引发异常处理
- 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 each 方法遍历 map 集合 | 代码示例 )
- java 遍历arrayList的四种方法
- js 实现二叉树中序遍历
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- C# 遍历
- JS遍历数组的方法【详解】
- JavaScript数组的常用方法总结:遍历,复制,反转,排序,添加,删除(前端常见面试题必考必问
- 【C++】第十一篇(基础)STL map创建、遍历、插入、删除等(详解)