From a5997063544ec9a472333dcc61cef8df54a4b039 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Sat, 13 Apr 2019 01:02:25 +0800 Subject: [PATCH 01/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 60 ++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 8613b4d..b0a0f19 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -721,8 +721,66 @@ def dfs(self, nums, target, index, path, res): matrix[r][q] = matrix[p][r] matrix[p][r] = cache ``` +## 37. Sudoku Solver +- 2019-04-13 - +必须独立解出来的题; +```python +class Solution(object): + def solveSudoku(self, board): + """ + :type board: List[List[str]] + :rtype: None Do not return anything, modify board in-place instead. + """ + self.board = board + self.solve() + + def findUnassigned(self): + for row in range(9): + for col in range(9): + if self.board[row][col] == ".": + return row, col + return -1, -1 + + def solve(self): + row, col = self.findUnassigned() + #no unassigned position is found, puzzle solved + if row == -1 and col == -1: + return True + for num in ["1","2","3","4","5","6","7","8","9"]: + if self.isSafe(row, col, num): + self.board[row][col] = num + if self.solve(): + return True + self.board[row][col] = "." + return False + + def isSafe(self, row, col, ch): + boxrow = row - row%3 + boxcol = col - col%3 + if self.checkrow(row,ch) and self.checkcol(col,ch) and self.checksquare(boxrow, boxcol, ch): + return True + return False + + def checkrow(self, row, ch): + for col in range(9): + if self.board[row][col] == ch: + return False + return True + + def checkcol(self, col, ch): + for row in range(9): + if self.board[row][col] == ch: + return False + return True + + def checksquare(self, row, col, ch): + for r in range(row, row+3): + for c in range(col, col+3): + if self.board[r][c] == ch: + return False + return True +``` ## 42. Trapping Rain Water From 30a534aad2d42470d1db4871d6cad14e18cd706a Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Sun, 14 Apr 2019 00:24:12 +0800 Subject: [PATCH 02/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 39 +++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index b0a0f19..27d6e04 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -781,6 +781,45 @@ class Solution(object): return False return True ``` +## 47. Permutations II +- 2019-04-14 + +和46题的区别是这次输入可以包含重复的数字,例如可以输入`[1,1,2]`,有更巧妙的解法,但暴力法是用46题的递归然后对生成的结果去重(最后去重或每次递归都去重) + +```python +class Solution(object): + def permuteUnique(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n=len(nums) + if n<=1: + return [nums] + elif n==2: #注意这部分输入的坑 + if nums[0]==nums[1]: + return [nums] + return [[nums[0],nums[1]],[nums[1],nums[0]]] + kk=[] + for i in range(n): + nlst=nums[0:i]+nums[i+1:] + c=self.permuteUnique(nlst) + ss=[] + for j in c: + w=[nums[i]] + w.extend(j) + ss.append(w) + kk.extend(ss) + ks=[] + for k in kk: + if k not in ks: + ks.append(k) + kk=ks + return kk +``` + + + ## 42. Trapping Rain Water From c6e85606a49786d626d8aaf72f5da377cd056257 Mon Sep 17 00:00:00 2001 From: xkx Date: Sun, 14 Apr 2019 23:36:05 +0800 Subject: [PATCH 03/25] add sort --- .../basic_theory/sort/bubble_sort.py | 19 ++++++++++++ .../basic_theory/sort/insert_sort.py | 14 +++++++++ .../basic_theory/sort/merge_sort.py | 24 ++++++++++++++++ .../basic_theory/sort/quick_sort.py | 22 ++++++++++++++ code@xukaixuan/basic_theory/sort/readme.md | 27 ++++++++++++++++++ .../basic_theory/sort/select_sort.py | 10 +++++++ ...3\347\244\272\346\204\217\345\233\276.jpg" | Bin 0 -> 141191 bytes 7 files changed, 116 insertions(+) create mode 100644 code@xukaixuan/basic_theory/sort/bubble_sort.py create mode 100644 code@xukaixuan/basic_theory/sort/insert_sort.py create mode 100644 code@xukaixuan/basic_theory/sort/merge_sort.py create mode 100644 code@xukaixuan/basic_theory/sort/quick_sort.py create mode 100644 code@xukaixuan/basic_theory/sort/readme.md create mode 100644 code@xukaixuan/basic_theory/sort/select_sort.py create mode 100644 "code@xukaixuan/basic_theory/sort/\345\275\222\345\271\266\344\270\216\345\277\253\351\200\237\346\216\222\345\272\217\345\214\272\345\210\253\347\244\272\346\204\217\345\233\276.jpg" diff --git a/code@xukaixuan/basic_theory/sort/bubble_sort.py b/code@xukaixuan/basic_theory/sort/bubble_sort.py new file mode 100644 index 0000000..b82c552 --- /dev/null +++ b/code@xukaixuan/basic_theory/sort/bubble_sort.py @@ -0,0 +1,19 @@ +def bubble_sort(arr): + swapped = True + x = -1 + while swapped: + swap = False + x += 1 + for i in range(1, n - x): + if arr[i - 1] > arr[i]: + arr[i - 1], arr[i] = arr[i], arr[i - 1] + swapped = True + + return arr + + +def test(): + print(bubble_sort([1, 3, 4, 6, 0, 1, 4, 2])) + + +test() diff --git a/code@xukaixuan/basic_theory/sort/insert_sort.py b/code@xukaixuan/basic_theory/sort/insert_sort.py new file mode 100644 index 0000000..826893a --- /dev/null +++ b/code@xukaixuan/basic_theory/sort/insert_sort.py @@ -0,0 +1,14 @@ +def insert_sort(arr): + """ + 每次循环迭代中,插入排序从数组中删除一个元素。 + 然后再一个已经有序的数组中找到该元素的位置,并将其插入其中。 + """ + for i in range(len(arr)): + cur = arr[i] + pos = i + + while pos >0 and arr[pos-1] > cur: + arr[pos] = arr[pos-1] + pos = pos -1 + arr[pos] = cur + return arr diff --git a/code@xukaixuan/basic_theory/sort/merge_sort.py b/code@xukaixuan/basic_theory/sort/merge_sort.py new file mode 100644 index 0000000..e0ed14f --- /dev/null +++ b/code@xukaixuan/basic_theory/sort/merge_sort.py @@ -0,0 +1,24 @@ +""" + +""" +def merge_sort(arr): + if len(arr)<= 1: + return arr + mid = len(arr)//2 + left,right = merge_sort(arr[:mid]),merge_sort(arr[mid:]) + return merge(left,right,arr.copy()) + +def merge(left,right,merged): + l_cur,r_cur = 0,0 + while l_cur= end: + return + pivot_idx = partition(array, begin, end) + quick_sort_recursion(array,begin,pivot_idx-1) + quick_sort_recursion(array,pivot_idx+1,end) + + +def quick_sort(arrar): + return quick_sort_recursion(arrar,0,len(arrar)-1) diff --git a/code@xukaixuan/basic_theory/sort/readme.md b/code@xukaixuan/basic_theory/sort/readme.md new file mode 100644 index 0000000..a931708 --- /dev/null +++ b/code@xukaixuan/basic_theory/sort/readme.md @@ -0,0 +1,27 @@ +# 排序算法 +## 冒泡排序 + + 冒泡排序属于原地排序算法,空间复杂度为**O(1)** + + 冒泡排序属于**稳定排序**(相同值时,两元素的相对位置不变) + + 时间复杂度为**O(n2)** +## 插入排序 + + 插入排序是原地排序,空间复杂度为O(1) + + 插入排序属于**稳定排序** + + 插入排序时间复杂度为**O(n2)** + +## 选择排序 ++ 选择排序属于原地排序,空间复杂度为**O(1)** ++ 选择排序**不属于稳定排序** ++ 选择排序的时间复杂度为为**O(n2)** + +## 归并排序 ++ 归并排序是稳定的排序算法 ++ 归并排序的时间复杂度为O(nlogn) ++ 空间复杂度为O(n) + +## 快速排序 ++ 原地排序算法,空间复杂度为O(1)_优于归并排序_ ++ 时间复杂度为O(nlogn) ++ 稳定排序算法 + + +归并排序,与快速排序都是用分治思想,其区别可参考![归并排序与快速排序区别](归并与快速排序区别示意图.jpg) \ No newline at end of file diff --git a/code@xukaixuan/basic_theory/sort/select_sort.py b/code@xukaixuan/basic_theory/sort/select_sort.py new file mode 100644 index 0000000..cf0684f --- /dev/null +++ b/code@xukaixuan/basic_theory/sort/select_sort.py @@ -0,0 +1,10 @@ +def select_sort(arr): + for i in range(len(arr)): + minum = i + for j in range(i+1,len(arr)): + if arr[j] < arr(minum): + minum = j + arr[minum] ,arr[i] = arr[i],arr[minum] + return arr + +print(select_sort([0,1,8,3,4,6,3,5])) diff --git "a/code@xukaixuan/basic_theory/sort/\345\275\222\345\271\266\344\270\216\345\277\253\351\200\237\346\216\222\345\272\217\345\214\272\345\210\253\347\244\272\346\204\217\345\233\276.jpg" "b/code@xukaixuan/basic_theory/sort/\345\275\222\345\271\266\344\270\216\345\277\253\351\200\237\346\216\222\345\272\217\345\214\272\345\210\253\347\244\272\346\204\217\345\233\276.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..3ac31ab4e0a4896da8fef9ae5caf6ea904fbf0e7 GIT binary patch literal 141191 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�OFMVH>wKlQ{kAL9d9Zp)cX@2dgj* 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 Date: Sun, 14 Apr 2019 23:38:29 +0800 Subject: [PATCH 04/25] Update readme.md --- code@xukaixuan/basic_theory/sort/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code@xukaixuan/basic_theory/sort/readme.md b/code@xukaixuan/basic_theory/sort/readme.md index a931708..dc58adb 100644 --- a/code@xukaixuan/basic_theory/sort/readme.md +++ b/code@xukaixuan/basic_theory/sort/readme.md @@ -24,4 +24,4 @@ + 稳定排序算法 -归并排序,与快速排序都是用分治思想,其区别可参考![归并排序与快速排序区别](归并与快速排序区别示意图.jpg) \ No newline at end of file +归并排序,与快速排序都是用分治思想,其区别可参考 ![归并排序与快速排序区别](归并与快速排序区别示意图.jpg) From 55db911795df754bf2355602794bd46506a61c1b Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Mon, 15 Apr 2019 00:47:16 +0800 Subject: [PATCH 05/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 27d6e04..d396a60 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -817,7 +817,32 @@ class Solution(object): kk=ks return kk ``` +## 50. Pow(x, n) +- 2019-04-15 +自己去实现乘方。因为输入的n是包含负数且到2^31-1,还是需要考虑边界和超限的,在Python里这些问题比较容易解决。说回实现上,暴力法是直接循环n次算乘法,我知道还有递推公式,只记得了偶数`x^n=x^{n/2}*x^{n/2}`;奇数`x^n=x^{n/2}*x^{n/2}*x`;在《编程之美》里还有迭代法,之后再研究。 +```python +class Solution(object): + def myPow(self, x, n): + if n==0: + return 1 + elif n==1: + return x + npow=True if n<0 else False + if npow: #负数的情况,只需要在递归的最后一次变成倒数就好,递归里面用正数算 + n=-n + kx=self.myPow(x,n//2) + if n%2==0:#偶数 + return 1/(kx*kx) + else: + return 1/(kx*kx*x) + else: + kx=self.myPow(x,n//2) + if n%2==0:#偶数 + return kx*kx + else: + return kx*kx*x +``` From f7df9dac6da69a9bbe0f313603abe4fb747eeed7 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Tue, 16 Apr 2019 01:23:24 +0800 Subject: [PATCH 06/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index d396a60..8b2eb96 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -843,6 +843,54 @@ class Solution(object): else: return kx*kx*x ``` +## 35. Search Insert Position +- 2019-04-16 + +排序数组,显然最优是用二分; + +```python +class Solution(object): + def searchInsert(self, nums, target): + if target > nums[len(nums) - 1]: + return len(nums) + + if target < nums[0]: + return 0 + + l, r = 0, len(nums) - 1 + while l <= r: + m = (l + r)/2 + if nums[m] > target: + r = m - 1 + if r >= 0: + if nums[r] < target: + return r + 1 + else: + return 0 + + elif nums[m] < target: + l = m + 1 + if l < len(nums): + if nums[l] > target: + return l + else: + return len(nums) + else: + return m +``` +在评论区发现一些很神奇的解法:一行:`return len([x for x in nums if x Date: Wed, 17 Apr 2019 00:41:16 +0800 Subject: [PATCH 07/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 8b2eb96..5cf7baf 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -887,8 +887,30 @@ except: nums.sort() #O(nlog(n)) return nums.index(target) ``` +## 19. Remove Nth Node From End of List +- 2019-04-17 +链表题,复杂度不高,但要实现很高效也比较有挑战 +```python +class Solution(object): + def removeNthFromEnd(self, head, n): + """ + :type head: ListNode + :type n: int + :rtype: ListNode + """ + fast = slow = head + for _ in range(n): + fast = fast.next + if not fast: + return head.next + while fast.next: + fast = fast.next + slow = slow.next + slow.next = slow.next.next + return head +``` From eafeabe465f1c99b75b0c79ac5b76c95da9ea937 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Thu, 18 Apr 2019 00:42:08 +0800 Subject: [PATCH 08/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 5cf7baf..9c0df12 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -911,8 +911,71 @@ class Solution(object): slow.next = slow.next.next return head ``` +## 56. Merge Intervals +- 2019-04-18 +合并区间,不排序的话就需要每次比较时往前看(一个while或for循环在一个for循环里),需要O(n^2),因此还是排序吧,根据首个元素排序后的判断就容易了 +```python +class Solution(object): + def merge(self, intervals): + """ + :type intervals: List[List[int]] + :rtype: List[List[int]] + """ + if not intervals: + return [] + intervals=sorted(intervals,key=lambda j:j[0]) + res=[] + cur=intervals[0] + res.append(cur) + for i in intervals: + if res[-1][1]>=i[0] and res[-1][1] Date: Fri, 19 Apr 2019 00:48:14 +0800 Subject: [PATCH 09/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 34 ++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 9c0df12..6fa5bb8 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -976,13 +976,45 @@ class Solution(object): j += dj return A ``` +## 38. Count and Say +- 2019-04-19 + +这是个easy题,还是很巧妙的,计算n时n-1情况下值的计数形成一个新数(返回值为str类型),n取决于n-1,所以有递推,推导出递推式子后写递归。关键是统计出连续的值有多少个,在连续时,count,不连续时换新的count。 +```python +class Solution(object): + def countAndSay(self, n): + if n==1: #终止条件 + return '1' + res='' + nm=self.countAndSay(n-1) + k=len(nm) + cv=[nm[0],0] #当前计数的值 可以用dict {nm[0]:0} + for i in nm: + if i==cv[0]: + cv[1]=cv[1]+1 + else: #不连续时,记录之前的状态+重置cv + res='{0}{1}{2}'.format(res,cv[1],cv[0]) + cv=[i,1] + res='{0}{1}{2}'.format(res,cv[1],cv[0]) + return res + +``` + + + + + + + + + ## 42. Trapping Rain Water -这题2018年在面试中遇到过,当时想了好久才推出递归写法,早就后悔没多刷题了,看到这题更后悔没早点多刷题了。 +这题2018年在面试中遇到过,当时想了好久才推出递归写法,早就后悔没多刷题了,看到这题更后悔没早点多刷题了。不愧是第42题。 ```python # 等我找到我以前的解法 From 1588e3b027c3f2d5a731a342c9ff904de511192d Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Sat, 20 Apr 2019 00:21:05 +0800 Subject: [PATCH 10/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 6fa5bb8..ce56a41 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -999,7 +999,19 @@ class Solution(object): return res ``` +## 62. Unique Paths +- 2019-04-20 +这是很有趣的题,用动规解,记得可以推出一个规则的。 +```python +class Solution(object): + def uniquePaths(self, m, n): + dp = [1] * n + for i in range(1, m): + for j in range(1, n): + dp[j] = dp[j - 1] + dp[j] + return dp[-1] if m and n else 0 +``` From abed4fefc0de143c381553d8abfe525444f30a40 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Sun, 21 Apr 2019 00:39:03 +0800 Subject: [PATCH 11/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index ce56a41..9a0a299 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1012,6 +1012,30 @@ class Solution(object): dp[j] = dp[j - 1] + dp[j] return dp[-1] if m and n else 0 ``` +## 64. Minimum Path Sum +- 2019-04-21 + +这种全局最优显然要考虑递归,类似背包问题。 +```python +class Solution(object): + def minPathSum(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + c,r = len(grid),len(grid[0]) + for i in range(c): + for j in range(r): + if i ==0 and j ==0: + continue + elif i == 0: + grid[i][j] += grid[i][j-1] + elif j == 0: + grid[i][j] += grid[i-1][j] + else: + grid[i][j] += min(grid[i][j-1], grid[i-1][j]) + return grid[-1][-1] +``` From 0ef0e68c3a780f8484a286a41f5ee1a4366ce7f3 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Mon, 22 Apr 2019 23:05:46 +0800 Subject: [PATCH 12/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 9a0a299..a5f437c 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1036,7 +1036,22 @@ class Solution(object): grid[i][j] += min(grid[i][j-1], grid[i-1][j]) return grid[-1][-1] ``` +## 53. Maximum Subarray +- 2019-04-22 +这题乍看上去需要循环尝试很多,看到一种很厉害的解法: +```python +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + for i in range(1, len(nums)): + if nums[i-1] > 0: + nums[i] += nums[i-1] + return max(nums) +``` From 3821ea47a43dbc8001564f67ad386fb5cfb7e1b3 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Tue, 23 Apr 2019 00:25:53 +0800 Subject: [PATCH 13/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index a5f437c..6f327e5 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1052,7 +1052,38 @@ class Solution(object): nums[i] += nums[i-1] return max(nums) ``` +## 74. Search a 2D Matrix +- 2019-04-23 + +简单搜索比较容易,O(log(n))解法还是挺难想的: +``` +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + if not matrix or target is None: + return False + + rows, cols = len(matrix), len(matrix[0]) + low, high = 0, rows * cols - 1 + + while low <= high: + mid = (low + high) / 2 + num = matrix[mid / cols][mid % cols] + + if num == target: + return True + elif num < target: + low = mid + 1 + else: + high = mid - 1 + + return False +``` From ed8ac62358add2e47c8e816030974a0e393da2d1 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Wed, 24 Apr 2019 10:40:40 +0800 Subject: [PATCH 14/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 6f327e5..35f4b5c 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1084,8 +1084,37 @@ class Solution(object): return False ``` +## 77. Combinations +- 2019-04-24 +组合,实现C{n,m},itertools里有轮子combinations +``` +if k == 0: + return [[]] + return [pre + [i] for i in range(k, n+1) for pre in self.combine(i-1, k-1)] +``` +可能更好理解些: +``` +class Solution: + def combine(self, n, k): + stack = [] + res = [] + l, x = 0, 1 + while True: + + if l == k: + res.append(stack[:]) + if l == k or n-x+1 < k-l: + if not stack: + return res + x = stack.pop() + 1 + l -= 1 + else: + stack.append(x) + x += 1 + l += 1 +``` From 5ea9f40872ccec366bed3e47c6280b4649125035 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Thu, 25 Apr 2019 00:58:21 +0800 Subject: [PATCH 15/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 35f4b5c..b0c5e9f 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1115,7 +1115,25 @@ class Solution: x += 1 l += 1 ``` +## 66. Plus One +- 2019-04-25 +easy题 +```python +class Solution(object): + def plusOne(self, digits): + digits[-1] += 1 + for i in range(len(digits)-1, 0, -1): + if digits[i] != 10: + break + digits[i] = 0 + digits[i-1] += 1 + + if digits[0] == 10: + digits[0] = 0 + digits.insert(0,1) + return digits +``` From 46573cd431b370549248c532ee09d86ca69a53c9 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Fri, 26 Apr 2019 00:20:17 +0800 Subject: [PATCH 16/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index b0c5e9f..a7a628e 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1134,7 +1134,18 @@ class Solution(object): digits.insert(0,1) return digits ``` +## 78. Subsets +- 2019-04-26 +求一个集合的所有子集, +```python +class Solution(object): + def subsets(self, nums): + res = [[]] + for num in sorted(nums): + res =res+ [item+[num] for item in res] + return res +``` From b9c5e8580a1d8ad51c4e74548fb5221b4f121ae0 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Sat, 27 Apr 2019 00:12:47 +0800 Subject: [PATCH 17/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index a7a628e..5023219 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1146,7 +1146,20 @@ class Solution(object): res =res+ [item+[num] for item in res] return res ``` +## 80. Remove Duplicates from Sorted Array II +- 2019-04-27 +要在O(1)空间内实现,就靠循环和if了; +```python +class Solution(object): + def removeDuplicates(self, nums): + i = 0 + for n in nums: + if i < 2 or n > nums[i-2]: + nums[i] = n + i += 1 + return i +``` From ec8ac795556f316fa0b3c4b88557a31c5078fd6c Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Sun, 28 Apr 2019 22:26:55 +0800 Subject: [PATCH 18/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 74 +++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 5023219..fdbdf1d 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1160,6 +1160,80 @@ class Solution(object): i += 1 return i ``` +## 67. Add Binary +- 2019-04-28 + +用二进制的进位逻辑去算,不过输入输出都是字符串,不过就0,1两种字符,不需要转int了 +```python +class Solution(object): + def addBinary(self, a, b):#按逐个进位写的巨长的代码 + na=len(a) + nb=len(b) + res=[] + rf={'0':0,'1':1} + aone=0 #进位 add new one + if na=nb + for i in range(nb): + r=rf[a[na-i-1]]+rf[b[nb-i-1]]+aone + if r==3: + res.append('1') + aone=1 + elif r==2: + res.append('0') + aone=1 + elif r==1: + res.append('1') #0 or 1 + aone=0 #? + elif r==0: + res.append('0') + aone=0 + for i in range(na-nb-1,-1,-1): + r=rf[a[i]]+aone + if r==2: + res.append('0') #aone=1 + elif r==1: + res.append('1') + aone=0 + elif r==0: + res.append('0') + aone=0 + if aone==1: + res.append('1') + ors=[] + for i in range(len(res),0,-1): + ors.append(res[i-1]) + return ''.join(ors) +``` +而看讨论区,一行代码有:`return bin(eval('0b' + a) + eval('0b' + b))[2:]`,0b means that the number that follows is in binary. `return f"{int(a,2)+int(b,2):b}"`; + + + From db784b1dfe2b5a83cade1752129ed79d68daaa1c Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Mon, 29 Apr 2019 00:12:09 +0800 Subject: [PATCH 19/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index fdbdf1d..2db9023 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1146,6 +1146,28 @@ class Solution(object): res =res+ [item+[num] for item in res] return res ``` +## 90. Subsets II +- 2019-04-29 + +和原先子集题(78)的区别是这个可以有重复元素; +```python +class Solution(object): + def subsetsWithDup(self, nums): + if not nums: + return [] + nums.sort() + res, cur = [[]], [] + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i-1]: + cur = [item + [nums[i]] for item in cur] + else: + cur = [item + [nums[i]] for item in res] + res += cur + return res +``` + + + ## 80. Remove Duplicates from Sorted Array II - 2019-04-27 From 525a29dad8513a23949082e97a139d30f5626000 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Tue, 30 Apr 2019 00:52:47 +0800 Subject: [PATCH 20/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 2db9023..94c2cdf 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1254,7 +1254,14 @@ class Solution(object): ``` 而看讨论区,一行代码有:`return bin(eval('0b' + a) + eval('0b' + b))[2:]`,0b means that the number that follows is in binary. `return f"{int(a,2)+int(b,2):b}"`; +## 91. Decode Ways +- 2019-04-30 +有趣的题目,标个:star,之后再解。 + +```python +# todo +``` From bad245b4618fc8d1e28be3ed9b1916ce14c73361 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Wed, 1 May 2019 21:55:51 +0800 Subject: [PATCH 21/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 94c2cdf..78155e2 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1262,8 +1262,24 @@ class Solution(object): ```python # todo ``` +## 180. Consecutive Numbers +- 2019-05-01 - +五一第一天写个SQL题; +``` +SELECT DISTINCT + l1.Num AS ConsecutiveNums +FROM + Logs l1, + Logs l2, + Logs l3 +WHERE + l1.Id = l2.Id - 1 + AND l2.Id = l3.Id - 1 + AND l1.Num = l2.Num + AND l2.Num = l3.Num +; +``` From 93f27d5b43443d7e30ccdc8ca621cd82a5440770 Mon Sep 17 00:00:00 2001 From: Kaixuan Xu Date: Thu, 2 May 2019 14:29:34 +0800 Subject: [PATCH 22/25] add leetcode 56,57 about sort problem --- .../56.merge-intervals.py | 18 ++++++++++++++++++ .../demo56 merge-intervals/readme.md | 18 ++++++++++++++++++ .../57.insert-interval.py | 16 ++++++++++++++++ .../demo57 insert-intervals/readme.md | 19 +++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 code@xukaixuan/demo56 merge-intervals/56.merge-intervals.py create mode 100644 code@xukaixuan/demo56 merge-intervals/readme.md create mode 100644 code@xukaixuan/demo57 insert-intervals/57.insert-interval.py create mode 100644 code@xukaixuan/demo57 insert-intervals/readme.md diff --git a/code@xukaixuan/demo56 merge-intervals/56.merge-intervals.py b/code@xukaixuan/demo56 merge-intervals/56.merge-intervals.py new file mode 100644 index 0000000..28efe52 --- /dev/null +++ b/code@xukaixuan/demo56 merge-intervals/56.merge-intervals.py @@ -0,0 +1,18 @@ +# +# @lc app=leetcode id=56 lang=python3 +# +# [56] Merge Intervals +# +class Solution: + def merge(self, intervals: List[List[int]]) -> List[List[int]]: + ans = [] + for invt in sorted(intervals,key = lambda x :x[0]): + if (ans and ans[-1][-1] >= invt[0]): + ans[-1][-1] = max(invt[-1],ans[-1][-1]) + else: + ans.append(invt) + return ans + + + + diff --git a/code@xukaixuan/demo56 merge-intervals/readme.md b/code@xukaixuan/demo56 merge-intervals/readme.md new file mode 100644 index 0000000..e659a66 --- /dev/null +++ b/code@xukaixuan/demo56 merge-intervals/readme.md @@ -0,0 +1,18 @@ +## 56 Merge Intervals +### 题目描述 +Given a collection of intervals, merge all overlapping intervals. +``` +# example1 +Input: [[1,3],[2,6],[8,10],[15,18]] +Output: [[1,6],[8,10],[15,18]] +Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6]. +``` + +``` +Input: [[1,4],[4,5]] +Output: [[1,5]] +Explanation: Intervals [1,4] and [4,5] are considered overlapping. +``` +### 考察知识点 + +排序 数组 \ No newline at end of file diff --git a/code@xukaixuan/demo57 insert-intervals/57.insert-interval.py b/code@xukaixuan/demo57 insert-intervals/57.insert-interval.py new file mode 100644 index 0000000..c4b89c6 --- /dev/null +++ b/code@xukaixuan/demo57 insert-intervals/57.insert-interval.py @@ -0,0 +1,16 @@ +# +# @lc app=leetcode id=57 lang=python3 +# +# [57] Insert Interval +# +class Solution: + def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]: + s,e = newInterval[0],newInterval[-1] + left = [i for i in intervals if i[-1]e] + if left + right != intervals: + s = min(s,intervals[len(left)][0]) + e = max(e,intervals[~len(right)][-1]) + return left + [Interval(s,e)] +right + + diff --git a/code@xukaixuan/demo57 insert-intervals/readme.md b/code@xukaixuan/demo57 insert-intervals/readme.md new file mode 100644 index 0000000..a799187 --- /dev/null +++ b/code@xukaixuan/demo57 insert-intervals/readme.md @@ -0,0 +1,19 @@ +## Insert Interval +### 考察知识点 +排序 +### description +Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). + +You may assume that the intervals were initially sorted according to their start times. + +Example 1: +``` +Input: intervals = [[1,3],[6,9]], newInterval = [2,5] +Output: [[1,5],[6,9]] +``` +Example 2: +``` +Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8] +Output: [[1,2],[3,10],[12,16]] +Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10]. +``` \ No newline at end of file From 4121ac5deb0c89787ffd2cb1dd5cf54f0d14b0a4 Mon Sep 17 00:00:00 2001 From: Kaixuan Xu Date: Sat, 4 May 2019 16:22:50 +0800 Subject: [PATCH 23/25] add binary search for special scenery --- code@xukaixuan/basic_theory/binary_search.js | 88 ++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 code@xukaixuan/basic_theory/binary_search.js diff --git a/code@xukaixuan/basic_theory/binary_search.js b/code@xukaixuan/basic_theory/binary_search.js new file mode 100644 index 0000000..a46d846 --- /dev/null +++ b/code@xukaixuan/basic_theory/binary_search.js @@ -0,0 +1,88 @@ +/** + * 二分查找 + */ + + // 查找等于第一个给定的值 +const binaryFindFirst = (sortedArr,target) =>{ + if (sortedArr.length === 0) return -1 + let low = 0 + let high = sortedArr.length-1 + while(low <=high) { + const mid = Math.floor((low+high)/2) + + if (target < sortedArr[mid]){ + high = mid -1 + }else if (target> sortedArr[mid]){ + low = mid +1 + }else{ + if (mid ===0||sortedArr[mid-1]{ + if (sortedArr.length ===0) return -1 + let low =0 + let high = sortedArr.length-1 + while(low <=high){ + const mid = Math.floor((low+high)/2) + if (targetsortedArr[mid]){ + low = mid +1 + }else { + if (mid ===sortedArr.length -1||sortedArr[mid+1]>target) return mid + low = mid + 1 + } + } + return -1 +} + +// 查找第一个大于等于给定元素的值 +const binaryFindFiRstBig = (sortedArr,target) =>{ + if (sortedArr.length === 0) return -1 + let low = 0 + let high = sortedArr.length-1 + while(low< high){ + const mid = Math.floor((low+high)/2) + if (sortedArr[mid]{ + if (sortedArr.length === 0) return -1 + let low = 0 + let high = sortedArr.length-1 + while(low< high){ + const mid = Math.floor((low+high)/2) + if (sortedArr[mid]target) return mid + low = mid +1 + } + } +return -1 +} + +const arr = [1, 2, 3, 4, 4, 4, 4, 4, 6, 7, 8, 8, 9] +const first = biaryFindFirst(arr, 4) +console.log(`FindFirst: ${first}`) + +const last = biaryFindLast(arr, 4) +console.log(`FindLast: ${last}`) +const FisrtBig = biaryFindFistBig(arr, 5) +console.log(`FindFisrtBig: ${FisrtBig}`) +const LastSmall = biaryFindLastSmall(arr, 4) +console.log(`FindLastSmall: ${LastSmall}`) \ No newline at end of file From 6fcec96b571a40f1971e3ba43c48febedc8f73ef Mon Sep 17 00:00:00 2001 From: Kaixuan Xu Date: Mon, 6 May 2019 22:25:07 +0800 Subject: [PATCH 24/25] add demo for binary_search and refine the basic threoy for bianary_search --- code@xukaixuan/basic_theory/binary_search.js | 4 +- .../33.search-in-rotated-sorted-array.py | 34 ++++++++++ .../demo 33 binary_search/readme.md | 27 ++++++++ ...ast-position-of-element-in-sorted-array.py | 65 +++++++++++++++++++ .../demo 34 binary_search/readme.md | 26 ++++++++ 5 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 code@xukaixuan/demo 33 binary_search/33.search-in-rotated-sorted-array.py create mode 100644 code@xukaixuan/demo 33 binary_search/readme.md create mode 100644 code@xukaixuan/demo 34 binary_search/34.find-first-and-last-position-of-element-in-sorted-array.py create mode 100644 code@xukaixuan/demo 34 binary_search/readme.md diff --git a/code@xukaixuan/basic_theory/binary_search.js b/code@xukaixuan/basic_theory/binary_search.js index a46d846..90f3b94 100644 --- a/code@xukaixuan/basic_theory/binary_search.js +++ b/code@xukaixuan/basic_theory/binary_search.js @@ -49,7 +49,7 @@ const binaryFindFiRstBig = (sortedArr,target) =>{ let high = sortedArr.length-1 while(low< high){ const mid = Math.floor((low+high)/2) - if (sortedArr[mid]= target){ if (mid ===0||sortedArr[mid-1]{ if (sortedArr.length === 0) return -1 let low = 0 let high = sortedArr.length-1 - while(low< high){ + while(low <= high){ const mid = Math.floor((low+high)/2) if (sortedArr[mid] int: + def search(self, nums, target): + if not nums: + return -1 + + low, high = 0, len(nums) - 1 + + while low <= high: + mid = (low + high) / 2 + if target == nums[mid]: + return mid + + if nums[low] <= nums[mid]: + if nums[low] <= target <= nums[mid]: + high = mid - 1 + else: + low = mid + 1 + else: + if nums[mid] <= target <= nums[high]: + low = mid + 1 + else: + high = mid - 1 + + return -1 + + + + diff --git a/code@xukaixuan/demo 33 binary_search/readme.md b/code@xukaixuan/demo 33 binary_search/readme.md new file mode 100644 index 0000000..0e3e3f5 --- /dev/null +++ b/code@xukaixuan/demo 33 binary_search/readme.md @@ -0,0 +1,27 @@ +## Search in Rotated Sorted Array + +Tags + +array | binary-search + +## description +Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. + +(i.e.,``` [0,1,2,4,5,6,7]``` might become ```[4,5,6,7,0,1,2]```). + +You are given a target value to search. If found in the array return its index, otherwise return -1. + +You may assume no duplicate exists in the array. + +Your algorithm's runtime complexity must be in the order of ```O(log n)```. + +``` +Example 1: + +Input: nums = [4,5,6,7,0,1,2], target = 0 +Output: 4 +Example 2: + +Input: nums = [4,5,6,7,0,1,2], target = 3 +Output: -1 +``` \ No newline at end of file diff --git a/code@xukaixuan/demo 34 binary_search/34.find-first-and-last-position-of-element-in-sorted-array.py b/code@xukaixuan/demo 34 binary_search/34.find-first-and-last-position-of-element-in-sorted-array.py new file mode 100644 index 0000000..9043625 --- /dev/null +++ b/code@xukaixuan/demo 34 binary_search/34.find-first-and-last-position-of-element-in-sorted-array.py @@ -0,0 +1,65 @@ +# +# @lc app=leetcode id=34 lang=python +# +# [34] Find First and Last Position of Element in Sorted Array +# +class Solution(object): + def searchRange(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lo,hi = 0,len(nums)-1 + first,last = -1,-1 + while(lo <=hi): + mid = lo +( hi -lo)//2 + if target< nums[mid]: + hi = mid -1 + elif target > nums[mid]: + lo = mid + 1 + else : + if (mid == 0 or nums[mid-1] < target): + first = mid + hi = mid-1 + lo,hi = 0,len(nums)-1 + while(lo <= hi): + mid = lo +( hi -lo)//2 + if target< nums[mid]: + hi = mid -1 + elif target > nums[mid]: + lo = mid + 1 + else : + if (mid == len(nums)-1 or nums[mid+1] > target): + last = mid + lo = mid+1 + return [first,last] + + +## most voted + +def searchRange(self, nums, target): + def binarySearchLeft(A, x): + left, right = 0, len(A) - 1 + while left <= right: + mid = (left + right) / 2 + if x > A[mid]: left = mid + 1 + else: right = mid - 1 + return left + + def binarySearchRight(A, x): + left, right = 0, len(A) - 1 + while left <= right: + mid = (left + right) / 2 + if x >= A[mid]: left = mid + 1 + else: right = mid - 1 + return right + + left, right = binarySearchLeft(nums, target), binarySearchRight(nums, target) + return (left, right) if left <= right else [-1, -1] + + + + + + diff --git a/code@xukaixuan/demo 34 binary_search/readme.md b/code@xukaixuan/demo 34 binary_search/readme.md new file mode 100644 index 0000000..a575ace --- /dev/null +++ b/code@xukaixuan/demo 34 binary_search/readme.md @@ -0,0 +1,26 @@ +# Search Insert Position + + +## description +Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. + +You may assume no duplicates in the array. +``` +Example 1: + +Input: [1,3,5,6], 5 +Output: 2 +Example 2: + +Input: [1,3,5,6], 2 +Output: 1 +Example 3: + +Input: [1,3,5,6], 7 +Output: 4 +Example 4: + +Input: [1,3,5,6], 0 +Output: 0 +``` + From 42fc31fc5a54a7315c1d3d177dbb464adda051f1 Mon Sep 17 00:00:00 2001 From: QLWeilcf <1226824818@qq.com> Date: Sun, 24 Nov 2019 20:25:03 +0800 Subject: [PATCH 25/25] Update lcfleetcode.md --- actionCodes@QLWeilcf/lcfleetcode.md | 105 ++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/actionCodes@QLWeilcf/lcfleetcode.md b/actionCodes@QLWeilcf/lcfleetcode.md index 78155e2..14d0220 100644 --- a/actionCodes@QLWeilcf/lcfleetcode.md +++ b/actionCodes@QLWeilcf/lcfleetcode.md @@ -1282,7 +1282,112 @@ WHERE ``` +## 37. 解数独 +(现在上leetcode默认都跳中文官网了) +```python +class Solution: + def solveSudoku(self, board: List[List[str]]) -> None: + """ + Do not return anything, modify board in-place instead. + """ + #x,y=(0,0) if self._b[0][0]==0 else self.getNext(0,0) + if board[0][0]=='.':#更容易理解的写法 + self.trysxy(0,0,board) + else: + x,y=self.getNext(0,0,board) + self.trysxy(x,y,board) + def checkNotSame(self,x,y,val,board):#检查每行、每列及宫内是否有和b[x,y]相同项 + for row_item in board[x]: #第x行 + if row_item==val: + return False + for rows in board:#y所在列 + if rows[y]==val: + return False + ax=x//3*3 #把0~3中的值映射到[0,3] + ab=y//3*3 + for r in range(ax,ax+3): + for c in range(ab,ab+3):#注意r==x & c==y的情况下,其实没必要,val不会是0 + if board[r][c]==val: + return False + return True + def getNext(self,x,y,board): #得到下一个未填项,从x,y往下数,值等于0就返回新下标 + for ny in range(y+1,9): #下标是[0,8] + if board[x][ny]=='.': + return (x,ny) + for row in range(x+1,9): + for ny in range(0,9): + if board[row][ny]=='.': + return (row,ny) + return (-1,-1) #不存在下一个未填项的情况 + def getPrem(self,x,y,board): #得到x,y处可以填的值 + prem=[] + rows=list(board[x]) + rows.extend([board[i][y] for i in range(9)]) + cols=set(rows) + for i in range(1,10): + i=str(i) + if i not in cols: + prem.append(i) + return prem + def trysxy(self,x,y,board): #主循环,尝试x,y处的解答 + if board[x][y]=='.': #不等于0的情况在调用外处理 + pv=self.getPrem(x,y,board) + for v in pv: + if self.checkNotSame(x,y,v,board):# 符合 行列宫均满足v符合条件 的 + board[x][y]=v + nx,ny=self.getNext(x,y,board) #得到下一个0值格 + if nx==-1: #没有下一个0格了;and ny==-1可以写但没必要 + return True + else: + _end=self.trysxy(nx,ny,board) #向下尝试,递归 + if not _end: + board[x][y]='.' #回溯,继续for v循环 + #只需要改x,y处的值,不改其他值 + else: + return True +``` +回溯法,时间效率还行,因为是递归,空间耗费比较大, + +```python +class Solution: + def isValidSudoku(self, board: List[List[str]]) -> bool: + if board[0][0]!='.': + return self.check(0,0,board) + else: + nx,ny=self.getNext(0,0,board) + if nx==-1: + return True + return self.check(nx,ny,board) + def check(self,x,y,b):#检查数独是否合法 + v=b[x][y] + for r in range(0,9): + if r!=x: + if b[r][y]==v: + return False + if r!=y: + if b[x][r]==v: + return False + ax=x//3*3 + ab=y//3*3 + for r in range(ax,ax+3): + for c in range(ab,ab+3): + if b[r][c]==v and r!=x and c!=y: + return False + nx,ny=self.getNext(x,y,b) + if nx==-1: + return True + return self.check(nx,ny,b) + def getNext(self,x,y,b): + for ny in range(y+1,9): + if b[x][ny]!='.': + return (x,ny) + for r in range(x+1,9): + for ny in range(0,9): + if b[r][ny]!='.': + return (r,ny) + return (-1,-1) +``` ## 42. Trapping Rain Water