首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

贪心算法:单调递增数字

738.单调递增数字 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。...(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)...空间复杂度:O(1) 贪心算法 题目要求小于等于N的最大单调递增的整数,那么拿一个两位的数字来举例。...例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数...这么说有点抽象,举个例子,数字:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位的3了,真正的结果应该是299。 所以从前后向遍历会改变已经遍历过的结果!

68030

回溯算法:电话号码的字母组合

❞ 17.电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。...理解本题后,要解决如下三个问题: 数字字母如何映射 两个字母就两个for循环,三个字符我就三个for循环,以此类推,然后发现代码根本写不出来 输入1 * #按键等等异常情况 数字字母如何映射 可以使用...注意这个index可不是 回溯算法:求组合问题!和回溯算法:求组合总和!中的startIndex了。...// 回溯 } 「注意这里for循环,可不像是在回溯算法:求组合问题!...和回溯算法:求组合总和!中从startIndex开始遍历的」。 「因为本题每一个数字代表的是不同集合,也就是求不同集合之间的组合,而77. 组合和216.组合总和III都是是求同一个集合中的组合!」

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

单调递增数字

单调递增数字 给定一个非负整数N,找出小于或等于N的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是单调递增的。...10) * 10 - 1 = 1330 - 1 = 1329 // 第二次循环就是 1300 - 1 = 1299 } return num; }; 思路 整体思路就是将数字当作字符串...通常来说可以把数字作为字符串来遍历处理,上面的题解是使用纯数字的方式去做,首先定义i作为标记记录遍历到到的位置,之后定义num作为待处理的数字,定义循环只要能够继续取出两位数就继续循环,这是循环的终止条件...之后取出两位数,这里~~是使用位运算强制转了整型,在之后将i * 10定义到下一位,如果低一位上的值大于大于高一位上的值,那么就将数值在第i位以后的值都变成0,然后减1即可达到上述的将此位减1以及之后的数字都变为...9,可以参考上边的示例,在循环结束后返回处理的数字即可。

1.5K20

☆打卡算法☆LeetCode 17、电话号码的字母组合 算法解析

一、题目 1、算法题目 “返回给定仅包含数字2-9的字符串的所有可能的字母组合。” 题目链接: 来源:力扣(LeetCode) 链接:17....电话号码的字母组合 - 力扣(LeetCode) (leetcode-cn.com) 2、题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。...每次取一位数字,然后从哈希表中枚举所有可能的字母,并将其中的一个字母插入到已有字母的后面,然后继续处理下一位数字,直到处理完所有数字,得到一个字母数组。...在题目中出现找出所有组合的字样的时候,就要想到是否可以用回溯算法。 在使用回溯算法的时候如果发现一个解不可行,则会舍弃不可行的解。...在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。

25860

电话号码的字母组合----回溯算法

---- 电话号码的字母组合题解集合 引言 回溯算法 BFS---队列求解 总结 ---- 引言 如果对回溯算法不了解的,建议先看这篇文章 小白易懂的回溯算法!!!...---- 回溯算法 将问题转化为对一颗多叉树的遍历过程,可以大大简化思维和实现难度 由上图可得: 递归结束条件: 输入的数字个数与当前已经找到的字母个数一致,说明找到了一个可行方案,然后将可行方案保存到...,等到字母个数等于需要的个数时,再压入结果数组 //num: 组合需要的字母个数 //n:当前用到了第一个数字 void dfs(string digits,string cur,int num,...(); } } }; ---- BFS—队列求解 其实上面的DFS的思路就是先选取第一个数字对应的第一个字母,然后去下一层与第二个数字的三个字母分别进行组合组合完后,再取第一个数字对应的第二个字母...,同样去下一层与第二个数字的三个字母进行组合,接着是第一个数字对应的第三个字母… 那么这里同样可以利用BFS的方法实现上述思路,看图: 我们可以利用队列的先进先出特点,再配合循环完成题目要求。

19920

js生成年月+字母+五位数的编码,实现字母递增与五位数序号递增

这里写目录标题 需求: 如图所示: 实现: 字母递增: 序号递增: 核心代码: pass:给后人留个坑吧: 需求: 1、新增数据要求生成的编码格式为YYYYMMA00001。...例如:202209A00001 2、序号 00001递增,当序号大于99999时,字母A递增。例如:A99999 时递增为B00001 如图所示: 实现: 年月就不说了。获取一下补个零就行了。...字母递增: // 获取字母(A大写 a小写) // index 从0开始 let letter = String.fromCharCode("A".charCodeAt(0) + index);...判断一下,当序号大于99999时,index+1,在给end从1开始计数(end为序号) // 满99999 字母递增 序号重置为1 let index = 0;...把字母递增和序号递增单独拧出来还是可以用的。。。

83520

字母数字webshell

最近ctf经常遇到类似姿势的题目,最开始还是比较蒙的 今天来进行一个总结 文章参考p牛的博客 一些不包含数字字母的webshell 无字母数字 如何构造一句话木马。...这里用到三种方法 异或构造 这种方法用到特殊符号的异或最终得到数字或者字母 如上图 echo "~"^"$" echo "^"^"<" 即可构造出字母 转换过程为 将两个要比较的字符转换成ascii之后...进行异或运算后得到了字母 ~的ascii值为126 126的二进制为1111110 $的ascii值为36 36的二进制为 0100100 两个二进制的值进行异或运算得到 1011010...转换成ascii为90 也就是对应大写字母Z 那么我们如果构造处一句话 不可能一个一个去试对吧 这里贴上一个 异或得到字母的PHP脚本 <?

1K20

回溯算法递增子序列

❞ 491.递增子序列 题目链接:https://leetcode-cn.com/problems/increasing-subsequences/ 给定一个整型数组, 你的任务是找到所有该数组的递增子序列...,递增子序列的长度至少是2。...给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。 思路 这个递增子序列比较像是取有序的子集。而且本题也要求不能有相同的递增子序列。...「本题只要同层重复使用元素,递增子序列就会重复」,而回溯算法:求子集问题(二)中是排序之后看相邻元素是否重复使用。...每天8:35准时推送一道经典算法题目,推送的每道题目都不是孤立的,而是由浅入深,环环相扣,帮你梳理算法知识脉络,轻松学算法

1.2K20

电话号码的字母组合

每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列...然后进行回退操作,遍历其余的字母排列。 回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。...在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。...当输入包含 个对应 个字母数字和 个对应 个字母数字时,不同的字母组合一共有 种,需要遍历每一种字母组合。...空间复杂度: ,其中 是输入中对应 个字母数字个数, 是输入中对应 个字母数字个数, 是输入数字的总个数。

13710

电话号码的字母组合

每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列...然后进行回退操作,遍历其余的字母排列。 回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。...在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。...当输入包含 个对应 个字母数字和 个对应 个字母数字时,不同的字母组合一共有 种,需要遍历每一种字母组合。...空间复杂度: ,其中 是输入中对应 个字母数字个数, 是输入中对应 个字母数字个数, 是输入数字的总个数。

17010

每日三题-电话号码的字母组合字母异位词分组、找到所有数组中消失的数字

‍个人主页: 才疏学浅的木子 ‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 ‍♂️ 本文来自专栏: 算法 算法类型:Hot100题 每日三题 电话号码的字母组合 字母异位词分组...找到所有数组中消失的数字 电话号码的字母组合 解法一 dfs 每次把当前数字的情况都列举出来 然后深搜 class Solution { public List letterCombinations...queue.isEmpty()){ list.add(queue.pop()); } return list; } } 字母异位词分组...解法一 使用HashMap,map中的value就为字母异位词的List,所以需要找到一个唯一的key来区分List 而字母异位词中的字母出现的次数是一致的所以使用字母出现次数作为key来区分...list.add(tlist); } } return list; } } 找到所有数组中消失的数字

53210

组合问题——LeetCode题目17:电话号码的字母组合

原题描述 + 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 ?...我希望你能有一个刷题经验:凡是涉及到排列组合的题目,基本都可以通过递归解决。因为不管是排列还是组合,都是从先求子问题,然后再求原问题。递推和递归是数学和编程中非常重要的思想,多写多练才会有感觉。...3.从特殊到一般——当给定多个集合时 先假设只有三个集合 ,不跳步的做法是,先求 和 的组合情况,返回一个新的集合 ,然后再做 和 的组合情况即为所求。...假设 表示从第 个集合到第 个集合的组合结果, 表示第 个集合,那么有如下递推关系:好了,现在你可以写代码了。...虽然递归程序的时间复杂度并不是最优的,但递归程序确实能够显示出一个人对问题的理解深度,分而治之是算法中的常用策略,希望大家多多练习。 这道题你会了,那么请你思考另一个问题——全排列应该怎么求?

54820
领券