From c4a4a0323127f3b47e89fdeefd7bc8a57d404e1e Mon Sep 17 00:00:00 2001 From: Effy Wang Date: Fri, 1 Apr 2022 17:26:47 +0800 Subject: [PATCH 01/23] =?UTF-8?q?Update=200704.=E4=BA=8C=E5=88=86=E6=9F=A5?= =?UTF-8?q?=E6=89=BE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add detailed comments to the Javascript version of Binary Search --- problems/0704.二分查找.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index 15e096a0..55625130 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -276,7 +276,7 @@ func search(nums []int, target int) int { ``` **JavaScript:** -(版本一)左闭右闭区间 +(版本一)左闭右闭区间 [left, right] ```js /** @@ -285,10 +285,12 @@ func search(nums []int, target int) int { * @return {number} */ var search = function(nums, target) { + // right是数组最后一个数的下标,num[right]在查找范围内,是左闭右闭区间 let left = 0, right = nums.length - 1; - // 使用左闭右闭区间 + // 当left=right时,由于nums[right]在查找范围内,所以要包括此情况 while (left <= right) { let mid = left + Math.floor((right - left)/2); + // 如果中间数大于目标值,要把中间数排除查找范围,所以右边界更新为mid-1;如果右边界更新为mid,那中间数还在下次查找范围内 if (nums[mid] > target) { right = mid - 1; // 去左面闭区间寻找 } else if (nums[mid] < target) { @@ -300,7 +302,7 @@ var search = function(nums, target) { return -1; }; ``` -(版本二)左闭右开区间 +(版本二)左闭右开区间 [left, right) ```js /** @@ -309,10 +311,13 @@ var search = function(nums, target) { * @return {number} */ var search = function(nums, target) { - let left = 0, right = nums.length; - // 使用左闭右开区间 [left, right) + // right是数组最后一个数的下标+1,nums[right]不在查找范围内,是左闭右开区间 + let left = 0, right = nums.length; + // 当left=right时,由于nums[right]不在查找范围,所以不必包括此情况 while (left < right) { let mid = left + Math.floor((right - left)/2); + // 如果中间值大于目标值,中间值不应在下次查找的范围内,但中间值的前一个值应在; + // 由于right本来就不在查找范围内,所以将右边界更新为中间值,如果更新右边界为mid-1则将中间值的前一个值也踢出了下次寻找范围 if (nums[mid] > target) { right = mid; // 去左区间寻找 } else if (nums[mid] < target) { From 3f7dd67a8031663d2b673a41587e3a640e0a4b1f Mon Sep 17 00:00:00 2001 From: FrankLin Date: Fri, 1 Apr 2022 10:57:25 -0400 Subject: [PATCH 02/23] Add C version for LeetCode349 using array --- problems/0349.两个数组的交集.md | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/problems/0349.两个数组的交集.md b/problems/0349.两个数组的交集.md index 82be1829..64d80a37 100644 --- a/problems/0349.两个数组的交集.md +++ b/problems/0349.两个数组的交集.md @@ -281,6 +281,38 @@ impl Solution { } } ``` + +C: +```C +int* intersection1(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){ + + int nums1Cnt[1000] = {0}; + int lessSize = nums1Size < nums2Size ? nums1Size : nums2Size; + int * result = (int *) calloc(lessSize, sizeof(int)); + int resultIndex = 0; + int* tempNums; + + int i; + + //Calculate the number's counts for nums1 array + for(i = 0; i < nums1Size; i ++) { + nums1Cnt[nums1[i]]++; + } + + //Check if the value existing in nums1 count array + for(i = 0; i < nums2Size; i ++) { + if(nums1Cnt[nums2[i]] > 0) { + result[resultIndex] = nums2[i]; + resultIndex ++; + //Clear this count to avoid duplicated value + nums1Cnt[nums2[i]] = 0; + } + } + * returnSize = resultIndex; + return result; +} +``` + ## 相关题目 * 350.两个数组的交集 II From abc08b6bb6f698135efe52ad0a7f20b333d32173 Mon Sep 17 00:00:00 2001 From: FrankLin Date: Fri, 1 Apr 2022 11:01:00 -0400 Subject: [PATCH 03/23] correct comments of C version of Leetcode349 --- problems/0349.两个数组的交集.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/problems/0349.两个数组的交集.md b/problems/0349.两个数组的交集.md index 64d80a37..45f19b6e 100644 --- a/problems/0349.两个数组的交集.md +++ b/problems/0349.两个数组的交集.md @@ -294,17 +294,17 @@ int* intersection1(int* nums1, int nums1Size, int* nums2, int nums2Size, int* re int i; - //Calculate the number's counts for nums1 array + /* Calculate the number's counts for nums1 array */ for(i = 0; i < nums1Size; i ++) { nums1Cnt[nums1[i]]++; } - //Check if the value existing in nums1 count array + /* Check if the value in nums2 is existing in nums1 count array */ for(i = 0; i < nums2Size; i ++) { if(nums1Cnt[nums2[i]] > 0) { result[resultIndex] = nums2[i]; resultIndex ++; - //Clear this count to avoid duplicated value + /* Clear this count to avoid duplicated value */ nums1Cnt[nums2[i]] = 0; } } From 297a22fd880f207bd9b621b7dbd5e8dfd84340a1 Mon Sep 17 00:00:00 2001 From: FrankLin Date: Fri, 1 Apr 2022 15:11:00 -0400 Subject: [PATCH 04/23] Add C version for Leetcode202 passed Leetcode submission --- problems/0202.快乐数.md | 70 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/problems/0202.快乐数.md b/problems/0202.快乐数.md index f0a46a40..741a735a 100644 --- a/problems/0202.快乐数.md +++ b/problems/0202.快乐数.md @@ -315,5 +315,75 @@ class Solution { } ``` +C: +```C +typedef struct HashNodeTag { + int key; /* num */ + struct HashNodeTag *next; +}HashNode; + +/* Calcualte the hash key */ +static inline int hash(int key, int size) { + int index = key % size; + return (index > 0) ? (index) : (-index); +} + +/* Calculate the sum of the squares of its digits*/ +static inline int calcSquareSum(int num) { + unsigned int sum = 0; + while(num > 0) { + sum += (num % 10) * (num % 10); + num = num/10; + } + return sum; +} + +#define HASH_TABLE_SIZE (32) + +bool isHappy(int n){ + int sum = n; + int index = 0; + bool bHappy = false; + bool bExit = false; + /* allocate the memory for hash table with chaining method*/ + HashNode ** hashTable = (HashNode **)calloc(HASH_TABLE_SIZE, sizeof(HashNode)); + + while(bExit == false) { + /* check if n has been calculated */ + index = hash(n, HASH_TABLE_SIZE); + + HashNode ** p = hashTable + index; + + while((*p) && (bExit == false)) { + /* Check if this num was calculated, if yes, this will be endless loop */ + if((*p)->key == n) { + bHappy = false; + bExit = true; + } + /* move to next node of the same index */ + p = &((*p)->next); + } + + /* put n intot hash table */ + HashNode * newNode = (HashNode *)malloc(sizeof(HashNode)); + newNode->key = n; + newNode->next = NULL; + + *p = newNode; + + sum = calcSquareSum(n); + if(sum == 1) { + bHappy = true; + bExit = true; + } + else { + n = sum; + + } + } + + return bHappy; +} +``` -----------------------
From fb5571f16576d9d16274219d60674662970366ec Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Sat, 2 Apr 2022 11:24:06 +0800 Subject: [PATCH 05/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880491.=E9=80=92?= =?UTF-8?q?=E5=A2=9E=E5=AD=90=E5=BA=8F=E5=88=97.md=EF=BC=89=EF=BC=9A?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0491.递增子序列.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/problems/0491.递增子序列.md b/problems/0491.递增子序列.md index 6103c3d0..3ea2382b 100644 --- a/problems/0491.递增子序列.md +++ b/problems/0491.递增子序列.md @@ -396,7 +396,35 @@ var findSubsequences = function(nums) { ``` +## TypeScript + +```typescript +function findSubsequences(nums: number[]): number[][] { + const resArr: number[][] = []; + backTracking(nums, 0, []); + return resArr; + function backTracking(nums: number[], startIndex: number, route: number[]): void { + let length: number = nums.length; + if (route.length >= 2) { + resArr.push(route.slice()); + } + const usedSet: Set = new Set(); + for (let i = startIndex; i < length; i++) { + if ( + nums[i] < route[route.length - 1] || + usedSet.has(nums[i]) + ) continue; + usedSet.add(nums[i]); + route.push(nums[i]); + backTracking(nums, i + 1, route); + route.pop(); + } + } +}; +``` + ### C + ```c int* path; int pathTop; From 77f1e2c85da13846b26cd33159e0dee565ef1d9d Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Sat, 2 Apr 2022 19:24:03 +0800 Subject: [PATCH 06/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880046.=E5=85=A8?= =?UTF-8?q?=E6=8E=92=E5=88=97.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typesr?= =?UTF-8?q?ipt=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0046.全排列.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/problems/0046.全排列.md b/problems/0046.全排列.md index c5369ddd..836c3646 100644 --- a/problems/0046.全排列.md +++ b/problems/0046.全排列.md @@ -331,6 +331,34 @@ var permute = function(nums) { ``` +## TypeScript + +```typescript +function permute(nums: number[]): number[][] { + const resArr: number[][] = []; + const helperSet: Set = new Set(); + backTracking(nums, []); + return resArr; + function backTracking(nums: number[], route: number[]): void { + if (route.length === nums.length) { + resArr.push(route.slice()); + return; + } + let tempVal: number; + for (let i = 0, length = nums.length; i < length; i++) { + tempVal = nums[i]; + if (!helperSet.has(tempVal)) { + route.push(tempVal); + helperSet.add(tempVal); + backTracking(nums, route); + route.pop(); + helperSet.delete(tempVal); + } + } + } +}; +``` + ### C ```c From c9dfda1c955c0665108d8aa7fc78b33d5edded99 Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Sat, 2 Apr 2022 23:34:25 +0800 Subject: [PATCH 07/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880047.=E5=85=A8?= =?UTF-8?q?=E6=8E=92=E5=88=97II.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0type?= =?UTF-8?q?script=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0047.全排列II.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/problems/0047.全排列II.md b/problems/0047.全排列II.md index 0cecac50..cce25cd9 100644 --- a/problems/0047.全排列II.md +++ b/problems/0047.全排列II.md @@ -292,6 +292,34 @@ var permuteUnique = function (nums) { ``` +### TypeScript + +```typescript +function permuteUnique(nums: number[]): number[][] { + nums.sort((a, b) => a - b); + const resArr: number[][] = []; + const usedArr: boolean[] = new Array(nums.length).fill(false); + backTracking(nums, []); + return resArr; + function backTracking(nums: number[], route: number[]): void { + if (route.length === nums.length) { + resArr.push(route.slice()); + return; + } + for (let i = 0, length = nums.length; i < length; i++) { + if (i > 0 && nums[i] === nums[i - 1] && usedArr[i - 1] === false) continue; + if (usedArr[i] === false) { + route.push(nums[i]); + usedArr[i] = true; + backTracking(nums, route); + usedArr[i] = false; + route.pop(); + } + } + } +}; +``` + ### Swift ```swift From 710e816012bb0198a5a42686e94d24b50aa68760 Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Sun, 3 Apr 2022 11:26:52 +0800 Subject: [PATCH 08/23] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=8820201112?= =?UTF-8?q?=E5=9B=9E=E6=BA=AF=E5=91=A8=E6=9C=AB=E6=80=BB=E7=BB=93.md?= =?UTF-8?q?=EF=BC=89=EF=BC=9A=E8=A1=A5=E5=85=85=E5=88=86=E6=9E=90=E6=8E=92?= =?UTF-8?q?=E5=88=97=E9=97=AE=E9=A2=98=E6=97=B6=E9=97=B4=E5=A4=8D=E6=9D=82?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/周总结/20201112回溯周末总结.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/周总结/20201112回溯周末总结.md b/problems/周总结/20201112回溯周末总结.md index c61de4bb..af08097b 100644 --- a/problems/周总结/20201112回溯周末总结.md +++ b/problems/周总结/20201112回溯周末总结.md @@ -76,7 +76,7 @@ * 空间复杂度:$O(n)$,递归深度为n,所以系统栈所用空间为$O(n)$,每一层递归所用的空间都是常数级别,注意代码里的result和path都是全局变量,就算是放在参数里,传的也是引用,并不会新申请内存空间,最终空间复杂度为$O(n)$。 排列问题分析: -* 时间复杂度:$O(n!)$,这个可以从排列的树形图中很明显发现,每一层节点为n,第二层每一个分支都延伸了n-1个分支,再往下又是n-2个分支,所以一直到叶子节点一共就是 n * n-1 * n-2 * ..... 1 = n!。 +* 时间复杂度:$O(n!)$,这个可以从排列的树形图中很明显发现,每一层节点为n,第二层每一个分支都延伸了n-1个分支,再往下又是n-2个分支,所以一直到叶子节点一共就是 n * n-1 * n-2 * ..... 1 = n!。每个叶子节点都会有一个构造全排列填进数组的操作(对应的代码:`result.push_back(path)`),该操作的复杂度为$O(n)$。所以,最终时间复杂度为:n * n!,简化为$O(n!)$。 * 空间复杂度:$O(n)$,和子集问题同理。 组合问题分析: From e48336238d25eac775f1897ad85b9be551ba1e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=A2=A6=E6=B4=81?= <3224935686@qq.com> Date: Sun, 3 Apr 2022 14:03:31 +0800 Subject: [PATCH 09/23] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=8C=E5=8F=89?= =?UTF-8?q?=E6=A0=91=E7=B3=BB=E5=88=9719=20=E4=BB=8E=E4=B8=AD=E5=BA=8F?= =?UTF-8?q?=E4=B8=8E=E5=90=8E=E5=BA=8F=E9=81=8D=E5=8E=86=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E6=9E=84=E9=80=A0=E4=BA=8C=E5=8F=89=E6=A0=91JS=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=98=E9=87=8F=E5=90=8D=20preorder->inorder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0106.从中序与后序遍历序列构造二叉树.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0106.从中序与后序遍历序列构造二叉树.md b/problems/0106.从中序与后序遍历序列构造二叉树.md index 496de431..7ecca773 100644 --- a/problems/0106.从中序与后序遍历序列构造二叉树.md +++ b/problems/0106.从中序与后序遍历序列构造二叉树.md @@ -790,7 +790,7 @@ func findRootIndex(target int,inorder []int) int{ ```javascript var buildTree = function(inorder, postorder) { - if (!preorder.length) return null; + if (!inorder.length) return null; const rootVal = postorder.pop(); // 从后序遍历的数组中获取中间节点的值, 即数组最后一个值 let rootIndex = inorder.indexOf(rootVal); // 获取中间节点在中序遍历中的下标 const root = new TreeNode(rootVal); // 创建中间节点 From 1dcbf7f6f0ba7b50da6685532a42d2ceac9aeccc Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Sun, 3 Apr 2022 19:43:34 +0800 Subject: [PATCH 10/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88=E5=9B=9E?= =?UTF-8?q?=E6=BA=AF=E7=AE=97=E6=B3=95=E5=8E=BB=E9=87=8D=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E7=9A=84=E5=8F=A6=E4=B8=80=E7=A7=8D=E5=86=99=E6=B3=95.md?= =?UTF-8?q?=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...溯算法去重问题的另一种写法.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/problems/回溯算法去重问题的另一种写法.md b/problems/回溯算法去重问题的另一种写法.md index b4bdda00..f48097e1 100644 --- a/problems/回溯算法去重问题的另一种写法.md +++ b/problems/回溯算法去重问题的另一种写法.md @@ -365,6 +365,87 @@ class Solution: return res ``` +TypeScript: + +**90.子集II** + +```typescript +function subsetsWithDup(nums: number[]): number[][] { + nums.sort((a, b) => a - b); + const resArr: number[][] = []; + backTraking(nums, 0, []); + return resArr; + function backTraking(nums: number[], startIndex: number, route: number[]): void { + resArr.push(route.slice()); + const helperSet: Set = new Set(); + for (let i = startIndex, length = nums.length; i < length; i++) { + if (helperSet.has(nums[i])) continue; + helperSet.add(nums[i]); + route.push(nums[i]); + backTraking(nums, i + 1, route); + route.pop(); + } + } +}; +``` + +**40. 组合总和 II** + +```typescript +function combinationSum2(candidates: number[], target: number): number[][] { + candidates.sort((a, b) => a - b); + const resArr: number[][] = []; + backTracking(candidates, target, 0, 0, []); + return resArr; + function backTracking( + candidates: number[], target: number, + curSum: number, startIndex: number, route: number[] + ) { + if (curSum > target) return; + if (curSum === target) { + resArr.push(route.slice()); + return; + } + const helperSet: Set = new Set(); + for (let i = startIndex, length = candidates.length; i < length; i++) { + let tempVal: number = candidates[i]; + if (helperSet.has(tempVal)) continue; + helperSet.add(tempVal); + route.push(tempVal); + backTracking(candidates, target, curSum + tempVal, i + 1, route); + route.pop(); + + } + } +}; +``` + +**47. 全排列 II** + +```typescript +function permuteUnique(nums: number[]): number[][] { + const resArr: number[][] = []; + const usedArr: boolean[] = []; + backTracking(nums, []); + return resArr; + function backTracking(nums: number[], route: number[]): void { + if (nums.length === route.length) { + resArr.push(route.slice()); + return; + } + const usedSet: Set = new Set(); + for (let i = 0, length = nums.length; i < length; i++) { + if (usedArr[i] === true || usedSet.has(nums[i])) continue; + usedSet.add(nums[i]); + route.push(nums[i]); + usedArr[i] = true; + backTracking(nums, route); + usedArr[i] = false; + route.pop(); + } + } +}; +``` Go: From 3635751759fcf689f9baae10ab5fe4a5d642b5f8 Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Sun, 3 Apr 2022 23:15:06 +0800 Subject: [PATCH 11/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880332.=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E5=AE=89=E6=8E=92=E8=A1=8C=E7=A8=8B.md=EF=BC=89?= =?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0332.重新安排行程.md | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/problems/0332.重新安排行程.md b/problems/0332.重新安排行程.md index 01f81c4d..370db45b 100644 --- a/problems/0332.重新安排行程.md +++ b/problems/0332.重新安排行程.md @@ -448,6 +448,50 @@ var findItinerary = function(tickets) { ``` +### TypeScript + +```typescript +function findItinerary(tickets: string[][]): string[] { + /** + TicketsMap 实例: + { NRT: Map(1) { 'JFK' => 1 }, JFK: Map(2) { 'KUL' => 1, 'NRT' => 1 } } + 这里选择Map数据结构的原因是:与Object类型的一个主要差异是,Map实例会维护键值对的插入顺序。 + */ + type TicketsMap = { + [index: string]: Map + }; + tickets.sort((a, b) => { + return a[1] < b[1] ? -1 : 1; + }); + const ticketMap: TicketsMap = {}; + for (const [from, to] of tickets) { + if (ticketMap[from] === undefined) { + ticketMap[from] = new Map(); + } + ticketMap[from].set(to, (ticketMap[from].get(to) || 0) + 1); + } + const resRoute = ['JFK']; + backTracking(tickets.length, ticketMap, resRoute); + return resRoute; + function backTracking(ticketNum: number, ticketMap: TicketsMap, route: string[]): boolean { + if (route.length === ticketNum + 1) return true; + const targetMap = ticketMap[route[route.length - 1]]; + if (targetMap !== undefined) { + for (const [to, count] of targetMap.entries()) { + if (count > 0) { + route.push(to); + targetMap.set(to, count - 1); + if (backTracking(ticketNum, ticketMap, route) === true) return true; + targetMap.set(to, count); + route.pop(); + } + } + } + return false; + } +}; +``` + ### Swift 直接迭代tickets数组: From d3a69ff358793c6c4f6f7636935b545437404f21 Mon Sep 17 00:00:00 2001 From: Camille0512 Date: Mon, 4 Apr 2022 12:55:12 +0800 Subject: [PATCH 12/23] Add one more python code --- problems/0098.验证二叉搜索树.md | 23 ++++++++++++++++- problems/0101.对称二叉树.md | 35 -------------------------- 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/problems/0098.验证二叉搜索树.md b/problems/0098.验证二叉搜索树.md index 4ed29619..ff4335fc 100644 --- a/problems/0098.验证二叉搜索树.md +++ b/problems/0098.验证二叉搜索树.md @@ -408,7 +408,28 @@ class Solution: return True ``` -## Go +```python +# 遵循Carl的写法,只添加了节点判断的部分 +class Solution: + def isValidBST(self, root: TreeNode) -> bool: + # method 2 + que, pre = [], None + while root or que: + while root: + que.append(root) + root = root.left + root = que.pop() + # 对第一个节点只做记录,对后面的节点进行比较 + if pre is None: + pre = root.val + else: + if pre >= root.val: return False + pre = root.val + root = root.right + return True +``` + +## Go ```Go import "math" diff --git a/problems/0101.对称二叉树.md b/problems/0101.对称二叉树.md index 0007b4d4..e4e232c8 100644 --- a/problems/0101.对称二叉树.md +++ b/problems/0101.对称二叉树.md @@ -437,41 +437,6 @@ class Solution: return True ``` -层序遍历 - -```python -class Solution: - def isSymmetric(self, root: TreeNode) -> bool: - if not root: return True - que, cnt = [[root.left, root.right]], 1 - while que: - nodes, tmp, sign = que.pop(), [], False - for node in nodes: - if not node: - tmp.append(None) - tmp.append(None) - else: - if node.left: - tmp.append(node.left) - sign = True - else: - tmp.append(None) - if node.right: - tmp.append(node.right) - sign = True - else: - tmp.append(None) - p1, p2 = 0, len(nodes) - 1 - while p1 < p2: - if (not nodes[p1] and nodes[p2]) or (nodes[p1] and not nodes[p2]): return False - elif nodes[p1] and nodes[p2] and nodes[p1].val != nodes[p2].val: return False - p1 += 1 - p2 -= 1 - if sign: que.append(tmp) - cnt += 1 - return True -``` - ## Go ```go From 2b80a6d36af3c00b260b55395361a8c960a02d0a Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Mon, 4 Apr 2022 16:56:36 +0800 Subject: [PATCH 13/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880051.N?= =?UTF-8?q?=E7=9A=87=E5=90=8E.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typesc?= =?UTF-8?q?ript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0051.N皇后.md | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/problems/0051.N皇后.md b/problems/0051.N皇后.md index 7eb0d7a0..85524e6f 100644 --- a/problems/0051.N皇后.md +++ b/problems/0051.N皇后.md @@ -457,6 +457,58 @@ var solveNQueens = function(n) { }; ``` +## TypeScript + +```typescript +function solveNQueens(n: number): string[][] { + const board: string[][] = new Array(n).fill(0).map(_ => new Array(n).fill('.')); + const resArr: string[][] = []; + backTracking(n, 0, board); + return resArr; + function backTracking(n: number, rowNum: number, board: string[][]): void { + if (rowNum === n) { + resArr.push(transformBoard(board)); + return; + } + for (let i = 0; i < n; i++) { + if (isValid(i, rowNum, board) === true) { + board[rowNum][i] = 'Q'; + backTracking(n, rowNum + 1, board); + board[rowNum][i] = '.'; + } + } + } +}; +function isValid(col: number, row: number, board: string[][]): boolean { + const n: number = board.length; + if (col < 0 || col >= n || row < 0 || row >= n) return false; + // 检查列 + for (let row of board) { + if (row[col] === 'Q') return false; + } + // 检查45度方向 + let x: number = col, + y: number = row; + while (y >= 0 && x < n) { + if (board[y--][x++] === 'Q') return false; + } + // 检查135度方向 + x = col; + y = row; + while (x >= 0 && y >= 0) { + if (board[y--][x--] === 'Q') return false; + } + return true; +} +function transformBoard(board: string[][]): string[] { + const resArr = []; + for (let row of board) { + resArr.push(row.join('')); + } + return resArr; +} +``` + ### Swift ```swift From 5374fb48a4ebacd714cb74ae979a5fd09a4c7f28 Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Mon, 4 Apr 2022 21:41:56 +0800 Subject: [PATCH 14/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880037.=E8=A7=A3?= =?UTF-8?q?=E6=95=B0=E7=8B=AC.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typesc?= =?UTF-8?q?ript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0037.解数独.md | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/problems/0037.解数独.md b/problems/0037.解数独.md index 53b9bb67..c1ac15af 100644 --- a/problems/0037.解数独.md +++ b/problems/0037.解数独.md @@ -439,6 +439,55 @@ var solveSudoku = function(board) { }; ``` +### TypeScript + +```typescript +/** + Do not return anything, modify board in-place instead. + */ +function isValid(col: number, row: number, val: string, board: string[][]): boolean { + let n: number = board.length; + // 列向检查 + for (let rowIndex = 0; rowIndex < n; rowIndex++) { + if (board[rowIndex][col] === val) return false; + } + // 横向检查 + for (let colIndex = 0; colIndex < n; colIndex++) { + if (board[row][colIndex] === val) return false; + } + // 九宫格检查 + const startX = Math.floor(col / 3) * 3; + const startY = Math.floor(row / 3) * 3; + for (let rowIndex = startY; rowIndex < startY + 3; rowIndex++) { + for (let colIndex = startX; colIndex < startX + 3; colIndex++) { + if (board[rowIndex][colIndex] === val) return false; + } + } + return true; +} +function solveSudoku(board: string[][]): void { + let n: number = 9; + backTracking(n, board); + function backTracking(n: number, board: string[][]): boolean { + for (let row = 0; row < n; row++) { + for (let col = 0; col < n; col++) { + if (board[row][col] === '.') { + for (let i = 1; i <= n; i++) { + if (isValid(col, row, String(i), board)) { + board[row][col] = String(i); + if (backTracking(n, board) === true) return true; + board[row][col] = '.'; + } + } + return false; + } + } + } + return true; + } +}; +``` + ### C ```C From f9079ddc18206cd8a16eeb8085808b65ecab6d6e Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Tue, 5 Apr 2022 10:56:53 +0800 Subject: [PATCH 15/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880455.=E5=88=86?= =?UTF-8?q?=E5=8F=91=E9=A5=BC=E5=B9=B2.md=EF=BC=89=EF=BC=9A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0typescript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0455.分发饼干.md | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/problems/0455.分发饼干.md b/problems/0455.分发饼干.md index 210b492d..f012df68 100644 --- a/problems/0455.分发饼干.md +++ b/problems/0455.分发饼干.md @@ -209,7 +209,50 @@ var findContentChildren = function(g, s) { ``` +### TypeScript + +```typescript +// 大饼干尽量喂胃口大的 +function findContentChildren(g: number[], s: number[]): number { + g.sort((a, b) => a - b); + s.sort((a, b) => a - b); + const childLength: number = g.length, + cookieLength: number = s.length; + let curChild: number = childLength - 1, + curCookie: number = cookieLength - 1; + let resCount: number = 0; + while (curChild >= 0 && curCookie >= 0) { + if (g[curChild] <= s[curCookie]) { + curCookie--; + resCount++; + } + curChild--; + } + return resCount; +}; +``` + +```typescript +// 小饼干先喂饱小胃口的 +function findContentChildren(g: number[], s: number[]): number { + g.sort((a, b) => a - b); + s.sort((a, b) => a - b); + const childLength: number = g.length, + cookieLength: number = s.length; + let curChild: number = 0, + curCookie: number = 0; + while (curChild < childLength && curCookie < cookieLength) { + if (g[curChild] <= s[curCookie]) { + curChild++; + } + curCookie++; + } + return curChild; +}; +``` + ### C + ```c int cmp(int* a, int* b) { return *a - *b; From c4992be374628782d18ffa8648fa1443825bc947 Mon Sep 17 00:00:00 2001 From: Lafish <34953046+LeUKi@users.noreply.github.com> Date: Wed, 6 Apr 2022 08:52:45 +0800 Subject: [PATCH 16/23] =?UTF-8?q?=E6=9B=B4=E6=96=B00122.=E4=B9=B0=E5=8D=96?= =?UTF-8?q?=E8=82=A1=E7=A5=A8=E7=9A=84=E6=9C=80=E4=BD=B3=E6=97=B6=E6=9C=BA?= =?UTF-8?q?II=EF=BC=9A=E9=94=99=E5=AD=97=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0122.买卖股票的最佳时机II.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0122.买卖股票的最佳时机II.md b/problems/0122.买卖股票的最佳时机II.md index 83b852c6..b31cbae3 100644 --- a/problems/0122.买卖股票的最佳时机II.md +++ b/problems/0122.买卖股票的最佳时机II.md @@ -40,7 +40,7 @@ 本题首先要清楚两点: * 只有一只股票! -* 当前只有买股票或者买股票的操作 +* 当前只有买股票或者卖股票的操作 想获得利润至少要两天为一个交易单元。 From fa00cd53b597d9ce837319f1967d0ae6478c430e Mon Sep 17 00:00:00 2001 From: lingyin Date: Wed, 6 Apr 2022 10:28:57 +0800 Subject: [PATCH 17/23] =?UTF-8?q?=E7=AE=80=E5=8C=96Peek=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E5=A4=8D=E7=94=A8Pop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0232.用栈实现队列.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/problems/0232.用栈实现队列.md b/problems/0232.用栈实现队列.md index b00ffd80..1a56d9f3 100644 --- a/problems/0232.用栈实现队列.md +++ b/problems/0232.用栈实现队列.md @@ -275,15 +275,11 @@ func (this *MyQueue) Pop() int { /** Get the front element. */ func (this *MyQueue) Peek() int { - for len(this.stack) != 0 { - val := this.stack[len(this.stack)-1] - this.stack = this.stack[:len(this.stack)-1] - this.back = append(this.back, val) - } - if len(this.back) == 0 { + val := this.Pop() + if val == 0 { return 0 } - val := this.back[len(this.back)-1] + this.back = append(this.back, val) return val } From ee93d4d62c36f74e5f878882cd28f7877c60d570 Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Wed, 6 Apr 2022 15:40:01 +0800 Subject: [PATCH 18/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880376.=E6=91=86?= =?UTF-8?q?=E5=8A=A8=E5=BA=8F=E5=88=97.md=EF=BC=89=EF=BC=9A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0typescript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0376.摆动序列.md | 50 +++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/problems/0376.摆动序列.md b/problems/0376.摆动序列.md index 5076c9ad..acd8996e 100644 --- a/problems/0376.摆动序列.md +++ b/problems/0376.摆动序列.md @@ -298,5 +298,55 @@ var wiggleMaxLength = function(nums) { }; ``` +### TypeScript + +**贪心** + +```typescript +function wiggleMaxLength(nums: number[]): number { + let length: number = nums.length; + if (length <= 1) return length; + let preDiff: number = 0; + let curDiff: number = 0; + let count: number = 1; + for (let i = 1; i < length; i++) { + curDiff = nums[i] - nums[i - 1]; + if ( + (preDiff <= 0 && curDiff > 0) || + (preDiff >= 0 && curDiff < 0) + ) { + preDiff = curDiff; + count++; + } + } + return count; +}; +``` + +**动态规划** + +```typescript +function wiggleMaxLength(nums: number[]): number { + const length: number = nums.length; + if (length <= 1) return length; + const dp: number[][] = new Array(length).fill(0).map(_ => []); + dp[0][0] = 1; // 第一个数作为波峰 + dp[0][1] = 1; // 第一个数作为波谷 + for (let i = 1; i < length; i++) { + dp[i][0] = 1; + dp[i][1] = 1; + for (let j = 0; j < i; j++) { + if (nums[j] < nums[i]) dp[i][0] = Math.max(dp[i][0], dp[j][1] + 1); + } + for (let j = 0; j < i; j++) { + if (nums[j] > nums[i]) dp[i][1] = Math.max(dp[i][1], dp[j][0] + 1); + } + } + return Math.max(dp[length - 1][0], dp[length - 1][1]); +}; +``` + + + -----------------------
From e4f34f3e47f6120c85e48d2032e6c00d1d13dad0 Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Wed, 6 Apr 2022 16:23:34 +0800 Subject: [PATCH 19/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880053.=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E5=AD=90=E5=BA=8F=E5=92=8C.md=EF=BC=89=EF=BC=9A?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0053.最大子序和.md | 37 +++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/problems/0053.最大子序和.md b/problems/0053.最大子序和.md index 3d11c91e..b5fb7642 100644 --- a/problems/0053.最大子序和.md +++ b/problems/0053.最大子序和.md @@ -211,7 +211,7 @@ func maxSubArray(nums []int) int { return maxSum } ``` - + ### Javascript: ```Javascript var maxSubArray = function(nums) { @@ -230,6 +230,41 @@ var maxSubArray = function(nums) { }; ``` +### TypeScript + +**贪心** + +```typescript +function maxSubArray(nums: number[]): number { + let curSum: number = 0; + let resMax: number = -Infinity; + for (let i = 0, length = nums.length; i < length; i++) { + curSum += nums[i]; + resMax = Math.max(curSum, resMax); + if (curSum < 0) curSum = 0; + } + return resMax; +}; +``` + +**动态规划** + +```typescript +// 动态规划 +function maxSubArray(nums: number[]): number { + const length = nums.length; + if (length === 0) return 0; + const dp: number[] = []; + dp[0] = nums[0]; + let resMax: number = nums[0]; + for (let i = 1; i < length; i++) { + dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]); + resMax = Math.max(resMax, dp[i]); + } + return resMax; +}; +``` + ----------------------- From 328b447cf44335883ce51109859f6f801e2515a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=A2=A6=E6=B4=81?= <3224935686@qq.com> Date: Thu, 7 Apr 2022 21:16:00 +0800 Subject: [PATCH 20/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0(0108.=E5=B0=86?= =?UTF-8?q?=E6=9C=89=E5=BA=8F=E6=95=B0=E7=BB=84=E8=BD=AC=E6=8D=A2=E4=B8=BA?= =?UTF-8?q?=E4=BA=8C=E5=8F=89=E6=90=9C=E7=B4=A2=E6=A0=91.md):=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0JavaScript=E8=BF=AD=E4=BB=A3=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...将有序数组转换为二叉搜索树.md | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/problems/0108.将有序数组转换为二叉搜索树.md b/problems/0108.将有序数组转换为二叉搜索树.md index bd5915fd..6ee3947b 100644 --- a/problems/0108.将有序数组转换为二叉搜索树.md +++ b/problems/0108.将有序数组转换为二叉搜索树.md @@ -355,6 +355,7 @@ func sortedArrayToBST(nums []int) *TreeNode { ``` ## JavaScript +递归 ```javascript var sortedArrayToBST = function (nums) { @@ -372,7 +373,44 @@ var sortedArrayToBST = function (nums) { return buildTree(nums, 0, nums.length - 1); }; ``` - +迭代 +```JavaScript +var sortedArrayToBST = function(nums) { + if(nums.length===0){ + return null; + } + let root=new TreeNode(0); //初始根节点 + let nodeQue=[root]; //放遍历的节点,并初始化 + let leftQue=[0]; //放左区间的下标,初始化 + let rightQue=[nums.length-1]; // 放右区间的下标 + + while(nodeQue.length){ + let curNode=nodeQue.pop(); + let left=leftQue.pop(); + let right=rightQue.pop(); + let mid=left+Math.floor((right-left)/2); + + curNode.val=nums[mid]; //将下标为mid的元素给中间节点 + +// 处理左区间 + if(left<=mid-1){ + curNode.left=new TreeNode(0); + nodeQue.push(curNode.left); + leftQue.push(left); + rightQue.push(mid-1); + } + +// 处理右区间 + if(right>=mid+1){ + curNode.right=new TreeNode(0); + nodeQue.push(curNode.right); + leftQue.push(mid+1); + rightQue.push(right); + } + } + return root; +}; +``` ## TypeScript ```typescript From 888bd8fe0b2320ffd0afe4cfe014e79116d23944 Mon Sep 17 00:00:00 2001 From: dmzlingyin Date: Sat, 9 Apr 2022 00:12:46 +0800 Subject: [PATCH 21/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0(ACM=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=A6=82=E4=BD=95=E6=9E=84=E5=BB=BA=E4=BA=8C=E5=8F=89=E6=A0=91?= =?UTF-8?q?.md):=20Go=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../前序/ACM模式如何构建二叉树.md | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/problems/前序/ACM模式如何构建二叉树.md b/problems/前序/ACM模式如何构建二叉树.md index bd2e9780..dba87ca1 100644 --- a/problems/前序/ACM模式如何构建二叉树.md +++ b/problems/前序/ACM模式如何构建二叉树.md @@ -220,6 +220,72 @@ int main() { ## Go ```Go +package main + +import "fmt" + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func constructBinaryTree(array []int) *TreeNode { + var root *TreeNode + nodes := make([]*TreeNode, len(array)) + + // 初始化二叉树节点 + for i := 0; i < len(nodes); i++ { + var node *TreeNode + if array[i] != -1 { + node = &TreeNode{Val: array[i]} + } + nodes[i] = node + if i == 0 { + root = node + } + } + // 串联节点 + for i := 0; i*2+2 < len(array); i++ { + if nodes[i] != nil { + nodes[i].Left = nodes[i*2+1] + nodes[i].Right = nodes[i*2+2] + } + } + return root +} + +func printBinaryTree(root *TreeNode, n int) { + var queue []*TreeNode + if root != nil { + queue = append(queue, root) + } + + result := []int{} + for len(queue) > 0 { + for j := 0; j < len(queue); j++ { + node := queue[j] + if node != nil { + result = append(result, node.Val) + queue = append(queue, node.Left) + queue = append(queue, node.Right) + } else { + result = append(result, -1) + } + } + // 清除队列中的本层节点, 进入下一层遍历 + queue = queue[len(queue):] + } + // 参数n控制输出值数量, 否则二叉树最后一层叶子节点的孩子节点也会被打印(但是这些孩子节点是不存在的). + fmt.Println(result[:n]) +} + +func main() { + array := []int{4, 1, 6, 0, 2, 5, 7, -1, -1, -1, 3, -1, -1, -1, 8} + root := constructBinaryTree(array) + printBinaryTree(root, len(array)) +} + ``` ## JavaScript From 7ad56a33e0cb2313fd0bdaaaf1bccb26f6b09b1f Mon Sep 17 00:00:00 2001 From: lingyin <32977462+dmzlingyin@users.noreply.github.com> Date: Sat, 9 Apr 2022 00:19:52 +0800 Subject: [PATCH 22/23] =?UTF-8?q?Update=20ACM=E6=A8=A1=E5=BC=8F=E5=A6=82?= =?UTF-8?q?=E4=BD=95=E6=9E=84=E5=BB=BA=E4=BA=8C=E5=8F=89=E6=A0=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../前序/ACM模式如何构建二叉树.md | 93 ++++++++++--------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/problems/前序/ACM模式如何构建二叉树.md b/problems/前序/ACM模式如何构建二叉树.md index dba87ca1..444f0071 100644 --- a/problems/前序/ACM模式如何构建二叉树.md +++ b/problems/前序/ACM模式如何构建二叉树.md @@ -225,65 +225,66 @@ package main import "fmt" type TreeNode struct { - Val int - Left *TreeNode - Right *TreeNode + Val int + Left *TreeNode + Right *TreeNode } func constructBinaryTree(array []int) *TreeNode { - var root *TreeNode - nodes := make([]*TreeNode, len(array)) + var root *TreeNode + nodes := make([]*TreeNode, len(array)) - // 初始化二叉树节点 - for i := 0; i < len(nodes); i++ { - var node *TreeNode - if array[i] != -1 { - node = &TreeNode{Val: array[i]} - } - nodes[i] = node - if i == 0 { - root = node - } + // 初始化二叉树节点 + for i := 0; i < len(nodes); i++ { + var node *TreeNode + if array[i] != -1 { + node = &TreeNode{Val: array[i]} } - // 串联节点 - for i := 0; i*2+2 < len(array); i++ { - if nodes[i] != nil { - nodes[i].Left = nodes[i*2+1] - nodes[i].Right = nodes[i*2+2] - } + nodes[i] = node + if i == 0 { + root = node } - return root + } + // 串联节点 + for i := 0; i*2+2 < len(array); i++ { + if nodes[i] != nil { + nodes[i].Left = nodes[i*2+1] + nodes[i].Right = nodes[i*2+2] + } + } + return root } func printBinaryTree(root *TreeNode, n int) { - var queue []*TreeNode - if root != nil { - queue = append(queue, root) - } + var queue []*TreeNode + if root != nil { + queue = append(queue, root) + } - result := []int{} - for len(queue) > 0 { - for j := 0; j < len(queue); j++ { - node := queue[j] - if node != nil { - result = append(result, node.Val) - queue = append(queue, node.Left) - queue = append(queue, node.Right) - } else { - result = append(result, -1) - } - } - // 清除队列中的本层节点, 进入下一层遍历 - queue = queue[len(queue):] - } - // 参数n控制输出值数量, 否则二叉树最后一层叶子节点的孩子节点也会被打印(但是这些孩子节点是不存在的). - fmt.Println(result[:n]) + result := []int{} + for len(queue) > 0 { + for j := 0; j < len(queue); j++ { + node := queue[j] + if node != nil { + result = append(result, node.Val) + queue = append(queue, node.Left) + queue = append(queue, node.Right) + } else { + result = append(result, -1) + } + } + // 清除队列中的本层节点, 进入下一层遍历 + queue = queue[len(queue):] + } + + // 参数n控制输出值数量, 否则二叉树最后一层叶子节点的孩子节点也会被打印(但是这些孩子节点是不存在的). + fmt.Println(result[:n]) } func main() { - array := []int{4, 1, 6, 0, 2, 5, 7, -1, -1, -1, 3, -1, -1, -1, 8} - root := constructBinaryTree(array) - printBinaryTree(root, len(array)) + array := []int{4, 1, 6, 0, 2, 5, 7, -1, -1, -1, 3, -1, -1, -1, 8} + root := constructBinaryTree(array) + printBinaryTree(root, len(array)) } ``` From 05ce805e98c61ffd3979f7430c2093be1e9c0dce Mon Sep 17 00:00:00 2001 From: LetMeFly666 <814114971@qq.com> Date: Sun, 10 Apr 2022 10:17:10 +0800 Subject: [PATCH 23/23] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BA=86=E6=9D=A5?= =?UTF-8?q?=E8=87=AAMac=E7=9A=84.DS=5FStore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pics/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 pics/.DS_Store diff --git a/pics/.DS_Store b/pics/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0