C++
码到程功0602
在计算机道路上越走越远
展开
-
字符串的最大公因子
思路:首先判断只有str1+str2==str2+str1时候才会有公约的部分,在进入此判断条件后,只需要找二者长度的最大公约数,从0到这部分截取就可。对于字符串 s 和 t,只有在 s = t + t + t + …+ t + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。输入:str1 = “ABABAB”, str2 = “ABAB”输入:str1 = “ABCABC”, str2 = “ABC”输入:str1 = “LEET”, str2 = “CODE”原创 2024-03-22 20:40:00 · 183 阅读 · 1 评论 -
赎金信
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。思路:只需要查找rans中每个字符的个数是否不超过maga中每个字符的字数,超过则错,否则对。输入:ransomNote = “aa”, magazine = “aab”输入:ransomNote = “aa”, magazine = “ab”输入:ransomNote = “a”, magazine = “b”如果可以,返回 true;否则返回 false。原创 2024-03-22 16:55:01 · 109 阅读 · 1 评论 -
同构字符串
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。同构的含义也可以这么解释:两个字符串中对应位置的每个字符第一次出现的位置是一样的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。给定两个字符串 s 和 t ,判断它们是否是同构的。输入:s = “egg”, t = “add”输入:s = “foo”, t = “bar”原创 2024-03-22 16:45:49 · 188 阅读 · 1 评论 -
阶乘后的零
思路:产生0的前提是要有2和5的因子,但是偶数的个数远远大于5的个数,因此只需要讨论有几个五,直接进行递归操作,递归计算这次除以五+每次除以五。给定一个整数 n ,返回 n!结果中尾随零的数量。= 120 ,有一个尾随 0。= 6 ,不含尾随 0。原创 2024-03-22 08:24:35 · 195 阅读 · 1 评论 -
不同路径数
思路:由于操作仅仅是向右/向下,因此可以将二维问题转换为一维的,可以把机器人的操作看成从第一行的各个点一直向下走到头,接着一直右拐,也就是有n种方法,最后记得返回的是n-1,不是n。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。从左上角开始,总共有 3 条路径可以到达右下角。输入:m = 3, n = 2。问总共有多少条不同的路径?原创 2024-03-22 08:16:58 · 212 阅读 · 1 评论 -
查找第k个序列
给出集合 [1,2,3,…,n],其所有元素共有 n!给定 n 和 k,返回第 k 个排列。思路:能不回溯尽量不回溯,切忌小题大做。输入:n = 3, k = 3。输入:n = 4, k = 9。输入:n = 3, k = 1。原创 2024-03-21 21:33:13 · 116 阅读 · 0 评论 -
删除有序数组的重复项
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]输出:5, nums = [0,1,2,3,4]输出:2, nums = [1,2,_]思路:就题论题,考察库函数。原创 2024-03-21 21:24:05 · 207 阅读 · 1 评论 -
括号生成
思路:回溯,回溯函数的递归退出条件是容器的一个子项生成完毕,递归条件是判断左括号数是否达到n,以及右括号数是否达到左括号,分别进行进栈、递归、出栈的三个套路型操作。输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。原创 2024-03-21 21:05:22 · 188 阅读 · 1 评论 -
只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。思路:分情况讨论,什么时候取中间值,什么时候取开头,什么时候取结尾。输入:nums = [4,1,2,1,2]输入:nums = [2,2,1]输入:nums = [1]原创 2024-03-21 20:38:06 · 116 阅读 · 1 评论 -
最长连续子序列
思路:动态规划,定义包含nums个值为1的int型容器作为dp,并判断条件:如果nums[i]-nums[i-1]==1则dp++,否则dp不变。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。解释:最长数字连续序列是 [1, 2, 3, 4]。输入:nums = [0,3,7,2,5,8,4,6,0,1]请你设计并实现时间复杂度为 O(n) 的算法解决此问题。输入:nums = [100,4,200,1,3,2]原创 2024-03-21 20:26:32 · 172 阅读 · 1 评论