Go语言-力扣刷题记录
文章平均质量分 66
记录一下刷题日常
Orasuka
狗狗狗,老哥们稳啊!
展开
-
二、字符串(29)38. 外观数列
countAndSay(4) = 读 "21" = 一 个 2 + 一 个 1 = "12" + "11" = "1211"描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 "111221"描述前一项,这个数是 21 即 “ 一 个 2 + 一 个 1 ” ,记作 "1211"countAndSay(3) = 读 "11" = 二 个 1 = "21"countAndSay(2) = 读 "1" = 一 个 1 = "11"解释:这是一个基本样例。转载 2022-09-22 09:39:06 · 67 阅读 · 0 评论 -
二、字符串(28)640. 求解方程
如果方程没有解或存在的解不为整数,请返回 "No solution"。求解一个给定的方程,将x以字符串 "x=#value" 的形式返回。该方程仅包含 '+' , '-' 操作,变量 x 和其对应系数。题目保证,如果方程中只有一个解,则 'x' 的值是一个整数。输入: equation = "x+5-3+x=6+x-2"输出: "Infinite solutions"输入: equation = "2x=x"输入: equation = "x=x"equation 只有一个 '='.转载 2022-09-21 10:23:01 · 107 阅读 · 0 评论 -
二、字符串(26)592. 分数加减运算
如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。输入只包含合法的最简分数,每个分数的分子与分母的范围是 [1,10]。如果输入的第一个分数或者输出的分数是正数,则 '+' 会被省略掉。输入和输出字符串只包含 '0' 到 '9' 的数字,以及 '/', '+' 和 '-'。输入: expression = "-1/2+1/2+1/3"输入: expression = "-1/2+1/2"输入: expression = "1/3-1/2"输出: "-1/6"转载 2022-09-06 10:38:28 · 146 阅读 · 0 评论 -
二、字符串(26)537. 复数乘法
解释:(1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式。解释:(1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串。输入:num1 = "1+-1i", num2 = "1+-1i"输入:num1 = "1+1i", num2 = "1+1i"输出:"0+-2i"...转载 2022-08-27 17:50:40 · 99 阅读 · 0 评论 -
二、字符串(25)553. 最优除法
动态规划(Dynamic Programming)是一种分阶段求解决策问题的数学思想,它通过把原问题分解为简单的子问题来解决复杂问题.动态规划在很多领域都有着广泛的应用,例如管理学,经济学,数学,生物学.你需要找出怎么添加括号,才能得到最大的结果,并且返回相应的字符串格式的表达式。例如, [2,3,4] -> 2 / 3 / 4。因为他们并不影响操作的优先级,所以你需要返回 "1000/(100/10/2)"。但是,以下加粗的括号 "1000/((100/10)/2)" 是冗余的,......转载 2022-08-27 17:08:57 · 113 阅读 · 0 评论 -
二、字符串(24)539. 最小时间差
将 \textit{timePoints}timePoints 排序后,最小时间差必然出现在 \textit{timePoints}timePoints 的两个相邻时间,或者 \textit{timePoints}timePoints 的两个首尾时间中。输入:timePoints = ["00:00","23:59","00:00"]输入:timePoints = ["23:59","00:00"]timePoints[i] 格式为 "HH:MM"...转载 2022-08-27 15:48:32 · 44 阅读 · 0 评论 -
二、字符串(23)506. 相对名次
题目要求找到每个运动员的相对名次,并同时给前三名标记为 \texttt{"Gold Medal", "Silver Medal", "Bronze Medal"}"Gold Medal", "Silver Medal", "Bronze Medal",其余的运动员则标记为其相对名次。输出:["Gold Medal","Silver Medal","Bronze Medal","4","5"]输出:["Gold Medal","5","Bronze Medal","Silver Medal","4"]...转载 2022-08-27 15:17:21 · 41 阅读 · 0 评论 -
二、字符串(22)412. Fizz Buzz
根据题目描述,当 i 是 3的倍数时answer[i] 包含“Fizz",当 i是 5 的倍数时answer[i] 包含 “Buzz",当 i 同时是 3 的倍数和 5 的倍数时answer[i] 既包含“Fizz" 也包含 “Fuzz",且Fizz" 在“Buzz" 前面。输出:["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]输出:["1","2","Fizz"]转载 2022-08-19 11:21:55 · 57 阅读 · 0 评论 -
二、字符串(21)299. 猜数字游戏
有多少位属于数字猜对了但是位置不对(称为 "Cows",奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。写出一个秘密数字,并请朋友猜这个数字是多少。给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。提示的格式为 "xAyB" ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B 表示奶牛。猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls",公牛),请注意秘密数字和朋友猜测的数字都可能含有重复数字。...转载 2022-08-18 11:27:50 · 70 阅读 · 0 评论 -
二.字符串(19)467. 环绕字符串中唯一的子字符串
解释:在字符串 s 中有 p 的六个子串 ("z", "a", "b", "za", "ab", "zab")。现在给定另一个字符串 p。返回 s 中 不同 的 p 的 非空子串 的数量。解释:字符串 s 中只有 p 的两个子串 ("a", "c")。解释:字符串 s 中只有 p 的一个 "a" 子字符。输入:p = "cac"输入:p = "zab"p 由小写英文字母组成。输入:p = "a"...转载 2022-08-09 11:34:24 · 46 阅读 · 0 评论 -
二.字符串(19)696. 计数二进制子串
假设counts 数组中两个相邻的数字为 u 或者 v,它们对应着 u 个 0 和 v 个 1,或者 u 个 1 和 v 个 0。给定一个字符串 s,统计并返回具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是成组连续的。解释:6 个子串满足具有相同数量的连续 1 和 0 :"0011"、"01"、"1100"、"10"、"0011" 和 "01"。解释:有 4 个子串:"10"、"01"、"10"、"01" ,具有相同数量的连续 1 和 0。...转载 2022-08-09 10:13:19 · 80 阅读 · 0 评论 -
二.字符串(18)551. 学生出勤记录 I
如果在更新缺勤次数和连续迟到次数之后,出现缺勤次数大于或等于 2 或者连续迟到次数大于或等于 3,则该出勤记录不满足可奖励的要求,返回false。给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。如果遇到 ‘L’,即迟到,则将连续迟到次数加 1,否则将连续迟到次数清零。解释:学生缺勤次数少于 2 次,且不存在 3 天或以上的连续迟到记录。如果遇到'A’,即缺勤,则将缺勤次数加 1,否则缺勤次数不变;s[i] 为 'A'、'L' 或 'P'...转载 2022-08-08 09:21:43 · 194 阅读 · 0 评论 -
二.字符串(17)657. 机器人能否返回原点
起始时机器人的坐标为(0,0),在遍历完所有指令并对机器人进行移动之后,判断机器人的坐标是否为 (0,0) 即可。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。“R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。具体来说,我们用两个变量 x 和 y 来表示机器人当前所在的坐标为(x,y),起始时x=0,y=0。在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。解释:机器人向上移动一次,然后向下移动一次。.转载 2022-08-08 09:01:19 · 57 阅读 · 0 评论 -
二.字符串(16)423. 从英文中重建数字
s[i] 为 ["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"] 这些字符之一。给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。输入:s = "owoztneoer"输入:s = "fviefuro"s 保证是一个符合题目要求的字符串。方法一:依次确定每一个数字的次数。Repeat()函数。...转载 2022-08-06 10:37:26 · 59 阅读 · 0 评论 -
二.字符串(15)451. 根据字符出现频率排序
题目要求将给定的字符串按照字符出现的频率降序排序,因此需要首先遍历字符串,统计每个字符出现的频率,然后每次得到频率最高的字符,生成排序后的字符串。按照出现频率从大到小的顺序遍历桶,对于每个出现频率,获得对应的字符,然后将每个字符按照出现频率拼接到排序后的字符串。由于每个字符在字符串中出现的频率存在上限,因此可以使用桶排序的思想,根据出现次数生成排序后的字符串。可以使用哈希表记录每个字符出现的频率,将字符去重后存入列表,再将列表中的字符按照频率降序排序。'e'出现两次,'r'和't'都只出现一次。...转载 2022-08-06 10:14:06 · 927 阅读 · 0 评论 -
二.字符串(14)49. 字母异位词分组
同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组字母异位词的标志,哈希表的值为一组字母异位词列表。遍历每个字符串,对于每个字符串,得到该字符串所在的一组字母异位词的标志,将当前字符串加入该组字母异位词的列表中。输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]]输出: [[""]]..转载 2022-08-05 10:15:18 · 63 阅读 · 0 评论 -
二.字符串(13)242. 有效的字母异位词
由于字符串只包含26 个小写字母,因此我们可以维护一个长度为 26 的频次数组table,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t,减去 table 中对应的频次,如果出现 table[i]转载 2022-08-05 09:33:48 · 45 阅读 · 0 评论 -
二.字符串(12)383. 赎金信
题目要求使用字符串magazine中的字符来构建新的字符串ransomNote,且ransomNote中的每个字符只能使用一次,只需要满足字符串magazine中的每个英文字母(’a’-’z’)的统计次数都大于等于ransomNote中相同字母的统计次数即可。如果字符串magazine的长度小于字符串ransomNote的长度,则我们可以肯定magazine无法构成ransomNote,此时直接返回false。ransomNote和magazine由小写英文字母组成。...转载 2022-07-28 16:54:28 · 172 阅读 · 0 评论 -
二.字符串(11)389. 找不同
首先遍历字符串ss,对其中的每个字符都将计数值加11;然后遍历字符串tt,对其中的每个字符都将计数值减11。当发现某个字符计数值为负数时,说明该字符在字符串tt中出现的次数大于在字符串ss中出现的次数,因此该字符为被添加的字符。如果将两个字符串拼接成一个字符串,则问题转换成求字符串中出现奇数次的字符。字符串t由字符串s随机重排,然后在随机位置添加一个字母。输入s="abcd",t="abcde"输入s="",t="y"解释'e'是那个被添加的字母。...转载 2022-07-28 16:38:00 · 711 阅读 · 0 评论 -
二.字符串(10)387. 字符串中的第一个唯一字符
当我们对字符串进行遍历时,设当前遍历到的字符为c,如果c不在哈希映射中,我们就将c与它的索引作为一个二元组放入队尾,否则我们就需要检查队列中的元素是否都满足「只出现一次」的要求,即我们不断地根据哈希映射中存储的值(是否为-1)选择弹出队首的元素,直到队首元素「真的」只出现了一次或者队列为空。当我们第一次遍历字符串时,设当前遍历到的字符为cc,如果cc不在哈希映射中,我们就将cc与它的索引作为一个键值对加入哈希映射中,否则我们将cc在哈希映射中对应的值修改为-1−1。...转载 2022-07-28 11:29:37 · 48 阅读 · 0 评论 -
二.字符串(8)557. 反转字符串中的单词 III
然后从头到尾遍历原字符串,直到找到空格为止,此时找到了一个单词,并能得到单词的起止位置。随后,根据单词的起止位置,可以将该单词逆序放到新字符串当中。当找到一个单词的时候,我们交换字符串第一个字符与倒数第一个字符,随后交换第二个字符与倒数第二个字符……需要注意的是,原地解法在某些语言(比如Java,JavaScript)中不适用,因为在这些语言中String类型是一个不可变的类型。给定一个字符串s,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。输出"doGgniD"...转载 2022-07-26 08:48:28 · 105 阅读 · 0 评论 -
二.字符串(7)541. 反转字符串 II
在解题时,需要仔细分析题目给出的规则,要尽可能地做到全面考虑所有可能出现的情况,这是解模拟类问题的关键点之一。模拟算法是一种基本的算法思想,可用于考查程序员的基本编程能力,其解决方法就是根据题目给出的规则对题目要求的相关过程进行编程模拟。在解决模拟类问题时,需要注意字符串处理、特殊情况处理和对题目意思的理解。给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。我们直接按题意进行模拟反转每个下标从2k的倍数开始的,长度为k的子串。...转载 2022-07-22 09:44:33 · 43 阅读 · 0 评论 -
二.字符串(6)344. 反转字符串
对于长度为N的待被反转的字符数组,我们可以观察反转前后下标的变化,假设反转前字符数组为s[0]s[1]s[2]...s[N-1],那么反转后字符数组为s[N-1]s[N-2]...s[0]。输入s=["H","a","n","n","a","h"]输入s=["h","e","l","l","o"]输出["h","a","n","n","a","H"]输出["o","l","l","e","h"]交换s[left]和s[right];...转载 2022-07-22 08:44:33 · 62 阅读 · 0 评论 -
二.字符串(5)58. 最后一个单词的长度
遍历到的每个字母都是最后一个单词中的字母,因此遍历到的字母数量即为最后一个单词的长度。由于字符串中至少存在一个单词,因此字符串中一定有字母。首先找到字符串中的最后一个字母,该字母即为最后一个单词的最后一个字母。给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。题目要求得到字符串中最后一个单词的长度,可以反向遍历字符串,寻找最后一个单词并计算其长度。解释最后一个单词是长度为6的“joyboy”。解释最后一个单词是“World”,长度为5。解释最后一个单词是“moon”,长度为4。...转载 2022-07-22 08:29:34 · 92 阅读 · 0 评论 -
二.字符串(4)434. 字符串中的单词数
计算字符串中单词的数量,就等同于计数单词的第一个下标的个数。因此,我们只需要遍历整个字符串,统计每个单词的第一个下标的数目即可。另一种方法直接使用语言内置的split函数可直接分离出字符串中的每个单词,在此我们不再详细展开。解释这里的单词是指连续的不是空格的字符,所以"Hello,"算作1个单词。统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。该下标为初始下标或者该下标的前下标对应的字符为空格;该下标对应的字符不为空格;...转载 2022-07-21 11:00:05 · 103 阅读 · 0 评论 -
二.字符串(3)14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1输入输出"fl"示例2输入输出""解释输入不存在公共前缀。提示strs[i]仅由小写英文字母组成。转载 2022-07-20 16:37:35 · 494 阅读 · 0 评论 -
二.字符串(2)125. 验证回文串
也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。初始时,左右指针分别指向sgood的两侧,随后我们不断地将这两个指针相向移动,每次移动一步,并判断这两个指针指向的字符是否相同。最简单的方法是对字符串ss进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串sgood中。第一种是使用语言中的字符串翻转API得到sgood的逆序字符串sgood_rev,只要这两个字符串相同,那么sgood就是回文串。输入"raceacar"...转载 2022-07-18 15:14:01 · 185 阅读 · 0 评论 -
二.字符串(1)520. 检测大写字母
若第1个字母为大写,则其他字母必须均为大写或均为小写,即其他字母必须与第2个字母的大小写相同;如果单词不只含有一个字母,只有首字母大写,比如"Google"。无论第1个字母是否大写,其他字母必须与第2个字母的大小写相同;若第1个字母为小写,则需额外判断第2个字母是否为小写。单词中所有字母都不是大写,比如"leetcode"。若第1个字母为小写,则其他字母必须均为小写。全部字母都是大写,比如"USA"。输入word="USA"改成这样才能通过测试。......转载 2022-07-15 08:43:07 · 172 阅读 · 0 评论 -
一.数组(29)238. 除自身以外数组的乘积
238. 除自身以外数组的乘积给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。示例 1:输入: nums = [1,2,3,4]输出: [24,12,8,6]示例 2:输入: nums = [-1,1,0,-3,3]输出: [0,0,9,0,0] 提示:2转载 2022-07-14 09:04:16 · 127 阅读 · 0 评论 -
一.数组(28)304. 二维区域和检索 - 矩阵不可变
304. 二维区域和检索 - 矩阵不可变给定一个二维矩阵 matrix,以下类型的多个请求:计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。实现 NumMatrix 类:NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1) 、右下角 (row2, c转载 2022-07-13 09:26:56 · 83 阅读 · 0 评论 -
一.数组(27)303. 区域和检索 - 数组不可变
303. 区域和检索 - 数组不可变给定一个整数数组 nums,处理以下类型的多个查询:计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left转载 2022-07-12 08:53:48 · 83 阅读 · 0 评论 -
一.数组(26)289. 生命游戏
289. 生命游戏根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活转载 2022-07-11 10:50:43 · 157 阅读 · 0 评论 -
一.数组(25)73. 矩阵置零
73. 矩阵置零给定一个 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 提示:m == matrix.lengthn == matrix[0].length1转载 2022-07-09 09:21:31 · 80 阅读 · 0 评论 -
一.数组(25)48. 旋转图像
48. 旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。提示:n == matrix.length == matrix[i].length1 ...转载 2022-07-04 15:10:47 · 186 阅读 · 0 评论 -
一.数组(24)
566. 重塑矩阵在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。提示:m == mat.lengthn == mat[i转载 2022-07-03 10:26:41 · 45 阅读 · 0 评论 -
一.数组(23)498. 对角线遍历
给你一个大小为 的矩阵 ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。示例 1:提示:m == mat.lengthn == mat[i].length1转载 2022-07-03 09:28:11 · 140 阅读 · 0 评论 -
一.数组(22)59. 螺旋矩阵 II
59. 螺旋矩阵 II给你一个正整数 ,生成一个包含 到 所有元素,且元素按顺时针顺序螺旋排列的 正方形矩阵 。 方法一:模拟模拟矩阵的生成。按照要求,初始位置设为矩阵的左上角,初始方向设为向右。若下一步的位置超出矩阵边界,或者是之前访问过的位置,则顺时针旋转,进入下一个方向。如此反复直至填入 n^2 个元素。记 matrix 为生成的矩阵,其初始元素设为 0。由于填入的元素均为正数,我们可以判断当前位置的元素值,若不为 0,则说明已经访问过此位置。前置知识点:代码如下:方法二:转载 2022-06-25 11:00:44 · 55 阅读 · 0 评论 -
一.数组(20)396. 旋转函数
给定一个长度为 n 的整数数组 nums 。假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]返回 F(0), F(1), ..., F(n-1)中的最大值 。生成的测试用例让答案符合 32 位 整数。示例 1:输入: nums = [4,3,2,6]输出: 26解释:F(0) = (0 * 4) + (1 * 3) +转载 2022-06-18 09:58:16 · 63 阅读 · 0 评论 -
一.数组(19)189. 轮转数组(方法二:环状替换不太会)
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]示例 2:输入:nums = [-1,-100,3,99], k = 2输出:[3,99,-1,-100]解释: 向右轮转 1 步: [99,-1,-10转载 2022-06-12 08:57:27 · 153 阅读 · 0 评论 -
一.数组(18)419. 甲板上的战舰(题目没看懂)
给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ,返回在甲板 board 上放置的 战舰 的数量。战舰 只能水平或者垂直放置在 board 上。换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。示例 1:输入:board = [["X",".",".","X"],[".",".",".","X"],[转载 2022-06-11 09:37:36 · 104 阅读 · 0 评论