File tree Expand file tree Collapse file tree 2 files changed +54
-11
lines changed Expand file tree Collapse file tree 2 files changed +54
-11
lines changed Original file line number Diff line number Diff line change @@ -403,6 +403,7 @@ class Solution:
403403```
404404
405405### Go:
406+ (版本一) 双指针
406407
407408``` Go
408409func threeSum (nums []int ) [][]int {
@@ -442,6 +443,42 @@ func threeSum(nums []int) [][]int {
442443 return res
443444}
444445```
446+ (版本二) 哈希解法
447+
448+ ``` Go
449+ func threeSum (nums []int ) [][]int {
450+ res := make ([][]int , 0 )
451+ sort.Ints (nums)
452+ // 找出a + b + c = 0
453+ // a = nums[i], b = nums[j], c = -(a + b)
454+ for i := 0 ; i < len (nums); i++ {
455+ // 排序之后如果第一个元素已经大于零,那么不可能凑成三元组
456+ if nums[i] > 0 {
457+ break
458+ }
459+ // 三元组元素a去重
460+ if i > 0 && nums[i] == nums[i-1 ] {
461+ continue
462+ }
463+ set := make (map [int ]struct {})
464+ for j := i + 1 ; j < len (nums); j++ {
465+ // 三元组元素b去重
466+ if j > i + 2 && nums[j] == nums[j-1 ] && nums[j-1 ] == nums[j-2 ] {
467+ continue
468+ }
469+ c := -nums[i] - nums[j]
470+ if _ , ok := set[c]; ok {
471+ res = append (res, []int {nums[i], nums[j], c})
472+ // 三元组元素c去重
473+ delete (set, c)
474+ } else {
475+ set[nums[j]] = struct {}{}
476+ }
477+ }
478+ }
479+ return res
480+ }
481+ ```
445482
446483### JavaScript:
447484
Original file line number Diff line number Diff line change @@ -201,7 +201,7 @@ class Solution:
201201 return result
202202```
203203``` python
204- # 递归法
204+ # 递归法
205205# Definition for a binary tree node.
206206# class TreeNode:
207207# def __init__(self, val=0, left=None, right=None):
@@ -210,18 +210,24 @@ class Solution:
210210# self.right = right
211211class Solution :
212212 def levelOrder (self , root : Optional[TreeNode]) -> List[List[int ]]:
213+ if not root:
214+ return []
215+
213216 levels = []
214- self .helper(root, 0 , levels)
217+
218+ def traverse (node , level ):
219+ if not node:
220+ return
221+
222+ if len (levels) == level:
223+ levels.append([])
224+
225+ levels[level].append(node.val)
226+ traverse(node.left, level + 1 )
227+ traverse(node.right, level + 1 )
228+
229+ traverse(root, 0 )
215230 return levels
216-
217- def helper (self , node , level , levels ):
218- if not node:
219- return
220- if len (levels) == level:
221- levels.append([])
222- levels[level].append(node.val)
223- self .helper(node.left, level + 1 , levels)
224- self .helper(node.right, level + 1 , levels)
225231
226232```
227233
You can’t perform that action at this time.
0 commit comments