Leetcode
坚不萌
从必然人走向自由人。
展开
-
[leetcode]051-N-Queens[递归回溯]
1. 原题https://leetcode.com/problems/n-queens/2. 思路题意,经典的n皇后问题。规则是,同一行,列和两条斜对角线不能有两个皇后。算法:递归回溯。从第一行开始,选择一个位置,验证是否符合条件,然后继续递归下一行。注意,判断条件时,因为我们是按行从上往下递归的,所以同一行不可能有两个皇后。3. 源码class Solution {...原创 2019-08-18 10:59:51 · 650 阅读 · 0 评论 -
[leetcode]038-Count and Say[字符串]
1. 原题https://leetcode.com/problems/count-and-say/2. 思路题意不是很好懂。题目说的是,给定n,输出上一次可以读出的字符串。默认n=1,字符串‘1’, 那么n=2, 上一次是一个1, 所以输出'11'。又比如 n=4, 对应字符串‘1211’, 那么n=5, 上一次里有一个1,一个2, 两个1, 所以输出'111221'显然,...原创 2019-07-31 15:26:07 · 113 阅读 · 0 评论 -
[leetcode]040-Combination Sum II[dfs回溯]
1. 原题https://leetcode.com/problems/combination-sum-ii/2. 思路题意:此题和39题基本一样。区别是结果中的元素不能重复。既然不能重复,如何做到呢?我们可以先对序列排序,dfs时,紧挨着的候选序列里的元素一样时,跳过。因为,第一次已经遍历过所有解空间,第二次再遍历会出现相同的求解子序列。算法:依然是dfs回溯已AC...原创 2019-08-03 13:41:50 · 102 阅读 · 0 评论 -
[leetcode]037-Sudoku Solver[递归]
1. 原题https://leetcode.com/problems/sudoku-solver/2. 思路题意:解决一个数独问题,输出结果。题目保证答案唯一。数独问题一般都是用暴力破解思想,递归求解。对每一个空格,依次填入1~9, 判断是否符合数独定义,递归求解下一个空格。直到填完最后一个空格。已AC.3. 源码class Solution {publ...原创 2019-07-30 18:13:33 · 102 阅读 · 0 评论 -
[leetcode]039-Combination Sum[dfs剪枝]
1. 原题https://leetcode.com/problems/combination-sum/2. 思路题意:给定一个序列和数值。从序列中选出一部分元素,使其和等于给定的目标值。这题本质上是背包问题。由于题目要输出所有的情况,这里直接采用dfs回溯算法求解。已AC。3. 源码class Solution {public: vector<vect...原创 2019-08-02 19:10:43 · 173 阅读 · 0 评论 -
[leetcode]036-Valid Sudoku[数理逻辑]
1. 原题https://leetcode.com/problems/valid-sudoku/2. 思路题意:判断数独是否符合给定的条件。数据结构用map或set存储,利用它们的性质可快速判断是否重复。每行和每列容易判断,9个小九宫格不是很容易判断。关键找出第i个小九宫格时的下标。自己用笔画一画就出来了。访问第i行j次时, 其应该访问的下标是 A[i/3*3+j/3]...原创 2019-07-29 15:20:30 · 97 阅读 · 0 评论 -
[leetcode]031-Next Permutation[数学逻辑][python]
1. 原题https://leetcode.com/problems/next-permutation/2. 思路题意:求出给定序列的下一个序列。思路:首先要理解什么是元素的全排列。一组数的全排列有多个方法获得。题目要求的是字典序的排列组合。对于字典序的排列,两个相邻的排列要求前缀尽可能多。所以下一个排列如何求呢? 其实全排列过程是从后向前逆序的过程。于是,我们从后向前...原创 2019-04-19 21:23:41 · 108 阅读 · 0 评论 -
[leetcode]033-Search in Rotated Sorted Array[二分查找]
1. 原题https://leetcode.com/problems/search-in-rotated-sorted-array/2. 思路题意:一个有序列表在某个位置前后两部分被调换,求出给定值的索引下标。思路:题目要求时间复杂度log(n), 显然要用二分法。我们依然考虑中间值n[mid], 如果其小于最右值,那么右部分是有序的。否则左部分有序。这样不断在某部分查找即...原创 2019-04-27 15:35:16 · 124 阅读 · 0 评论 -
[leetcode]175-Combine Two Tables[SQL]
1. 原题https://leetcode.com/problems/combine-two-tables/2. 思路查询表中数据,使用外联结即可。3. 源码# Write your MySQL query statement belowSELECT pe.FirstName, pe.LastName, ad.City, ad.StateFROM Person AS pe...原创 2019-04-14 20:30:38 · 129 阅读 · 0 评论 -
[leetcode]032-Longest Valid Parentheses[动态规划]
1. 原题https://leetcode.com/problems/longest-valid-parentheses/submissions/2. 思路题意:给出一串由括号组成的字符串,求出最长匹配的子串思路:比较难。容易想到的方法就是遍历字符串。利用栈的思想,找出匹配的括号位置,不断更新匹配长度。另外的方法就是动态规划了。dp[i]表示以下标i结尾时的最长长度。假...原创 2019-04-21 21:27:32 · 101 阅读 · 0 评论 -
[leetcode]030-Substring with Concatenation of All Words[数学逻辑map]
1. 原题https://leetcode.com/problems/substring-with-concatenation-of-all-words/2. 思路题意:给出一个字符串,多个等长的单词,输出匹配时的索引下标。给出的所有单词任意组合且中间无多余字符即匹配。注意,字符串长度可能小于单词长度。思路:题目较难。由于单词等长,所以只需遍历词长这么多次。每次遍历...原创 2019-04-13 21:54:34 · 98 阅读 · 0 评论 -
[leetcode]028-Implement strStr()[字符串处理]
1. 原题https://leetcode.com/problems/implement-strstr/2. 思路查找字符串中是否含有子串,返回初始下标。比较简单。由于STL里有find函数,可以直接使用。也可以自己写匹配算法。3. 源码class Solution {public: int strStr(string haystack, string ne...原创 2019-02-12 19:56:53 · 104 阅读 · 0 评论 -
[leetcode]041-First Missing Positive[数理逻辑]
1. 原题https://leetcode.com/problems/first-missing-positive/2. 思路题意:给出一个数组,输出数组中未包含的最小正数。如果题目未限定空间复杂度O(1), 那么我们很容易做出来。直接开个含N+1元素的数组判断即可。现在,只有多想一想。利用原数组的操作,也可以求出来。毕竟,输出结果最大为n+1. 那么,我们可以把每一个(1...原创 2019-08-05 16:10:28 · 140 阅读 · 0 评论 -
[leetcode]034-Find First and Last Position of Element in Sorted Array[二分查找]
1. 原题https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/2. 思路题意:给出一个有序序列和一个目标值,返回目标值下标的最小和最大值。时间复杂度要求O(logn),显然要用二分查找。存在多个重复值,利用二分法分别得到最小和最大索引即可。3. 源码...原创 2019-07-28 09:26:33 · 89 阅读 · 0 评论 -
[leetcode]050-Pow(x, n)[数理逻辑-递归]
1. 原题https://leetcode.com/problems/powx-n/2. 思路题意,求一个数的n次方。把n次方分半,看成求两个n/2次方。即用递归求解。3. 源码import mathclass Solution: def myPow(self, x: float, n: int) -> float: if (n==0):...原创 2019-08-16 11:11:44 · 261 阅读 · 0 评论 -
[leetcode]046-Permutations[全排列-递归]
1. 原题https://leetcode.com/problems/permutations/2. 思路题意:输出一个序列的全排列。显然,最简单的就是递归求法。比如[1, 2, 3, 4],那就求:1 + [2, 3, 4]的全排列2 + [1, 3, 4]的全排列3 + [1, 2, 4]的全排列4 + [1, 2, 3]的全排列3. 源码clas...原创 2019-08-12 14:05:40 · 141 阅读 · 0 评论 -
[leetcode]045-Jump Game II[贪心算法]
1. 原题https://leetcode.com/problems/jump-game-ii/2. 思路题意:求出最小步数,使其到达最远距离。显然,这可以利用贪心算法,局部最优得出全局最优。在每次遍历中,基于当前位置能够到达的最远距离,判断在该范围内,下次能到达的最远距离,更新该距离即可。3. 源码class Solution {public: int...原创 2019-08-11 15:13:16 · 147 阅读 · 0 评论 -
[leetcode]049-Group Anagrams[字符串处理]
1. 原题https://leetcode.com/problems/group-anagrams/2. 思路题意:给出多个字符串,相同字符构成的字符串分到一块。算法:每个字符串先排序,排序好的字符串相同就放到一起。这时,要用到map,来存放索引。3. 源码class Solution {public: vector<vector<string&...原创 2019-08-15 12:30:56 · 182 阅读 · 0 评论 -
[leetcode]048-Rotate Image[数学逻辑]
1. 原题https://leetcode.com/problems/rotate-image/2. 思路给出一个方阵,将其顺时针旋转90度后,输出结果。限定条件,空间复杂度为常量。显然,最容易想到的是一圈圈的交换元素旋转。不过代码实现有点复杂。可以慢慢观察,矩阵先以副对角线交换后,再水平居中翻转,就能实现。也可以先主对角线,再竖直居中对调。3. 源码clas...原创 2019-08-14 13:20:37 · 166 阅读 · 0 评论 -
[leetcode]044-Wildcard Matching[动态规划]
1. 原题https://leetcode.com/problems/wildcard-matching/2. 思路题意:判断模式串和目标串是否匹配解法有多种,可以用递归。我最初写的递归,不过会超时。字符串匹配问题通用方法是动态规划。数组dp[i][j]表示p[i]之前的字符串是否匹配s[j]之前的字符串。边界dp[0][0]=1,显然目标串作为内循环方便。3.源码...原创 2019-08-09 20:19:14 · 178 阅读 · 0 评论 -
[leetcode]052-N-Queens II[递归回溯]
1.原题https://leetcode.com/problems/n-queens-ii/2. 思路这题和上道题51思路是一样的,只不过,搜索到结果后不需要保存,只需要计数就可以了。3. 源码class Solution {public: int totalNQueens(int n) { dim = n; vector<...原创 2019-08-19 10:45:44 · 204 阅读 · 0 评论 -
[leetcode]043-Multiply Strings[数理逻辑]
1. 原题:https://leetcode.com/problems/multiply-strings/2. 思路题意,给出两个数(字符串形式),求出相乘后的结果。其实就是大整数的乘法。逐位相乘就好。3. 源码class Solution {public: string multiply(string num1, string num2) { ...原创 2019-08-07 15:58:07 · 131 阅读 · 0 评论 -
[leetcode]047-Permutations II[全排列-递归]
1. 原题https://leetcode.com/problems/permutations-ii/2. 思路和上题类似,求全排列,不过给出的元素存在重复值。算法:递归。关键是如何去重。1. 首先进行排序,遇到前后相等的,只递归第一次就行。2. 递归时的数组参数按值传入,不应按引用。以免子递归搞乱顺序。3. 源码class Solution {public:...原创 2019-08-13 14:20:26 · 132 阅读 · 0 评论 -
[leetcode]042-Trapping Rain Water[数理逻辑]
1. 原题https://leetcode.com/problems/trapping-rain-water/2. 思路题意,求出柱体间能够容纳的水面积。考查逻辑能力。我们找到一个居中的最大值,然后从两边向中间遍历累加值即可。3. 源码# find the max value of center, then collect water from side to cen...原创 2019-08-06 16:03:20 · 131 阅读 · 0 评论 -
[leetcode]035-Search Insert Position[二分查找]
1. 原题https://leetcode.com/problems/search-insert-position/2. 思路题意:比较简单,返回给定值在有序序列的索引。直接用二分查找即可。3. 源码class Solution {public: int searchInsert(vector<int>& nums, int target) ...原创 2019-07-28 19:22:59 · 119 阅读 · 0 评论 -
[leetcode]-027-Remove Element[数学逻辑]
1. 原题https://leetcode.com/problems/remove-element/2. 思路题意:给定一个数组和一个目标值,删除和目标值重复的元素。比较简单。遍历时,把不等的元素前移就好了。3. 源码class Solution {public: int removeElement(vector<int>& nums, in...原创 2019-02-10 21:27:37 · 131 阅读 · 0 评论 -
[leetcode]026-Remove Duplicates from Sorted Array[数学逻辑]
1. 原题https://leetcode.com/problems/remove-duplicates-from-sorted-array/2. 思路题意:给定一个数组,去重并输出长度。比较简单。由于是有序数组,设置一个下标指示变量pos就行了。遍历比较相邻的整数,不等则nums[++pos] = nums[i].3. 源码class Solution {publ...原创 2019-02-09 21:56:17 · 124 阅读 · 0 评论 -
[leetcode]025-Reverse Nodes in k-Group[单链表-递归]
1. 原题https://leetcode.com/problems/reverse-nodes-in-k-group/2. 思路题意:给定一个单链表,依次翻转k个结点。难度中等。可以迭代处理,依次翻转,这里用的递归。3. 源码/** * Definition for singly-linked list. * struct ListNode { * int...原创 2019-02-07 20:36:36 · 151 阅读 · 0 评论 -
[leetcode]014-Longest Common Prefix[字符串]
1. 原题https://leetcode.com/problems/longest-common-prefix/2. 思路题意:找出一组字符串的最长公共前缀。比较简单。直接垂直扫描,比较每个字符是否相等。也可以用二分法,分而治之法等。3. 源码class Solution {public: string longestCommonPrefix(vector&l...原创 2019-01-25 21:02:56 · 129 阅读 · 0 评论 -
[leetcode]013-Roman to Integer[字符处理]
1. 原题:https://leetcode.com/problems/roman-to-integer/2. 思路:题意:罗马数字表示的整数转化成阿拉伯数字。比较简单。遍历每个字符累加即可,若遇到前置的,再减去多加的。3. 源码:class Solution {public: int romanToInt(string s) { int h[1...原创 2019-01-24 21:54:54 · 459 阅读 · 0 评论 -
[leetcode]008-String to Integer (atoi)[数理逻辑]
1. 原题https://leetcode.com/problems/string-to-integer-atoi/2. 思路题意:字符串转为Int。中等难度,转换时累加即可。关键是如何处理边界问题。a1)起始处的空白字符要忽略a2)第一个有效字符可以为'+'或者'-'a3)符号不能重复,必需紧跟数字,遇到非数字结束a4)溢出int表示范围要输出INT_MAX或INT_...原创 2019-01-14 21:54:04 · 184 阅读 · 0 评论 -
[leetcode]010-Regular Expression Matching[递归]
1. 原题https://leetcode.com/problems/regular-expression-matching/2. 思路题意:按照给定的规则判断两个字符串是否匹配。题目有些难。常规思路无法很好的处理。经分析,模式串与目标串的匹配可以层层分解成子模式串与子目标串的匹配。于是,解决这类问题,可以用递归和动态规划。递归容易理解,这里用的递归。先处理递归边界。...原创 2019-01-19 21:59:06 · 148 阅读 · 0 评论 -
[leetcode]006-ZigZag Conversion[快乐模拟]
1. 原题https://leetcode.com/problems/zigzag-conversion/2. 思路题意:按照给出的z字形顺序输出字符串。模拟题,中等难度。根据z字形顺序,把字符依次存储到row个字符串里,然后拼接起来输出。时间复杂度O(N), 空间复杂度O(n).3. 源码class Solution {public: string con...原创 2019-01-08 21:47:11 · 509 阅读 · 0 评论 -
[leetcode]007-Reverse Integer[数学逻辑]
1. 原题https://leetcode.com/problems/reverse-integer/2. 思路题意:将一个整数逆转,若溢出需输出0.比较简单,可以模拟字符串逆转的方法。我是利用字符串的逆转,字符串<-->数字的转换来判定溢出问题。3. 源码class Solution {public: int reverse(int x) {...原创 2019-01-13 17:40:18 · 132 阅读 · 0 评论 -
[leetcode]009-Palindrome Number[字符处理]
1. 原题https://leetcode.com/problems/palindrome-number/2. 思路题意:判断一个整数是否回文。比较简单,转成字符串或者反向计算各数位即可。3. 源码class Solution {public: bool isPalindrome(int x) { if (x < 0) ...原创 2019-01-17 20:56:09 · 130 阅读 · 0 评论 -
[leetcode]004-Median of Two Sorted Arrays[二分查找]
1. 原题https://leetcode.com/problems/median-of-two-sorted-arrays/2. 思路题意:给出两个有序序列,求出合并后的有序序列的中位数。复杂度要求O(log (m+n)).思路:复杂度限定,方法只能用二分法了。不少朋友可能做过元素个数相等的两个序列求中位的题目。这里个数不定,如何二分查找呢?首先,初始查找第k = ( (...原创 2019-01-02 22:37:36 · 121 阅读 · 0 评论 -
[leetcode]005-Longest Palindromic Substring[动态规划]
1. 原题https://leetcode.com/problems/longest-palindromic-substring/2. 思路题意:找出最长回文子串。方法有多种,暴力破解和动态规划等。这里采用DP算法。动态规划的核心是找出转移方程。我们假设i~j是一个回文串,那么若s[i-1] == s[j+1], (i-1, j+1)也是一个回文串,否则不是。于是,我们设定...原创 2019-01-06 21:45:22 · 196 阅读 · 0 评论 -
[leetcode]003-Longest Substring Without Repeating Characters[动态规划]
1. 原题https://leetcode.com/problems/longest-substring-without-repeating-characters/2. 思路题意:给出一个字符串, 求出最长的子串(连续的),要求所含的字符均不重复。难度中等,这里采用动态规划的思想。变量cp记录当前最长子串的起始位置,若与当前字符S[i]重复,则进行转移。新的最长子串起始位置...原创 2018-12-30 22:08:13 · 167 阅读 · 0 评论 -
002-[leetcode] Add Two Numbers[链表]
1. 原题 https://leetcode.com/problems/add-two-numbers/2. 思路题意:给出两个链表,模拟两个十进制数进行相加,输出新的链表。基本逻辑题,不难。已AC3. 源码/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2018-12-29 22:13:33 · 102 阅读 · 0 评论 -
[leetcode]011-Container With Most Water[贪心算法]
1. 原题https://leetcode.com/problems/container-with-most-water/2. 思路题意:给出一组数,表示坐标轴上对应的高度,求出两者所围成的最大蓄水量。中等难度。显然,暴力算法,时间复杂度O(n^2).不妨先假设最外围的两个围成的面积最大。因为面积由最小的高度决定,于是下一步我们替换掉当前较小的,才有可能求出更大的,然后再判...原创 2019-01-21 21:38:13 · 252 阅读 · 0 评论