Skip to content

Commit 940d2f9

Browse files
committed
regular leetcode
1 parent d1989ae commit 940d2f9

6 files changed

+332
-0
lines changed

035._search_insert_position.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
###35. Search Insert Position
2+
3+
题目:
4+
<https://leetcode.com/problems/search-insert-position/>
5+
6+
7+
难度:
8+
9+
Medium
10+
11+
12+
递归
13+
14+
```
15+
class Solution(object):
16+
def searchInsert(self, nums, target):
17+
"""
18+
:type nums: List[int]
19+
:type target: int
20+
:rtype: int
21+
"""
22+
n = len(nums)
23+
if target <= nums[0]:
24+
return 0
25+
if target > nums[n-1]:
26+
return n
27+
for i in range(1,n):
28+
if target == nums[i]:
29+
return i
30+
elif target > nums[i-1] and target < nums[i]:
31+
return i
32+
```

094._binary_tree_inorder_traversal.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
###94. Binary Tree Inorder Traversal
2+
3+
题目:
4+
<https://leetcode.com/problems/binary-tree-inorder-traversal/>
5+
6+
7+
难度:
8+
9+
Medium
10+
11+
12+
递归
13+
14+
```
15+
class Solution(object):
16+
def inorderTraversal(self, root):
17+
"""
18+
:type root: TreeNode
19+
:rtype: List[int]
20+
"""
21+
self.lst = []
22+
self.DFS(root)
23+
return self.lst
24+
25+
26+
def DFS(self,root):
27+
if root == None:
28+
return
29+
if root.left:
30+
self.DFS(root.left)
31+
self.lst.append(root.val)
32+
if root.right:
33+
self.DFS(root.right)
34+
35+
```
36+
37+
非递归用stack,我听谁讲过 😓
38+
39+
// to be done
40+
41+
42+
via wikipedia
43+
44+
45+
递归:
46+
47+
```
48+
inorder(node)
49+
if (node = null)
50+
return
51+
inorder(node.left)
52+
visit(node)
53+
inorder(node.right)
54+
```
55+
56+
57+
非递归,跟之前那个iterator有得一拼,其实好几个题都是在玩这个花样?
58+
59+
```
60+
iterativeInorder(node)
61+
s ← empty stack
62+
while (not s.isEmpty() or node ≠ null)
63+
if (node ≠ null)
64+
s.push(node)
65+
node ← node.left
66+
else
67+
node ← s.pop()
68+
visit(node)
69+
node ← node.right
70+
```

112._path_sum.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
###112. Path Sum
2+
3+
题目:
4+
<https://leetcode.com/problems/path-sum/>
5+
6+
7+
难度:
8+
9+
Easy
10+
11+
12+
递归
13+
14+
```
15+
class Solution(object):
16+
def hasPathSum(self, root, sum):
17+
"""
18+
:type root: TreeNode
19+
:type sum: int
20+
:rtype: bool
21+
"""
22+
if root == None:
23+
return False
24+
else:
25+
if root.val == sum and (root.left == None and root.right == None):
26+
return True
27+
else:
28+
return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)
29+
30+
```

125._valid_palindrome.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
###125. Valid Palindrome
2+
3+
题目:
4+
<https://leetcode.com/problems/valid-palindrome/>
5+
6+
7+
难度:
8+
9+
Easy
10+
11+
根据这个palindrome原理来看,running time比较慢
12+
13+
```
14+
class Solution(object):
15+
def isPalindrome(self,s):
16+
"""
17+
:type s: str
18+
:rtype: bool
19+
"""
20+
Alphabets = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9']
21+
i = 0
22+
j = len(s) - 1
23+
palindrome = True
24+
lowerS = s.lower()
25+
while i < j:
26+
if lowerS[i] not in Alphabets:
27+
i += 1
28+
continue
29+
if lowerS[j] not in Alphabets:
30+
j -= 1
31+
continue
32+
if lowerS[i] != lowerS[j]:
33+
print(i,lowerS[i],j,lowerS[j])
34+
return False
35+
# s[i] == s[j]
36+
else:
37+
i += 1
38+
j -= 1
39+
return palindrome
40+
41+
```
42+
43+
当然也有取巧的办法,就是比较reversed string 和原本的是否相等.
44+
Running time 提升了一点
45+
46+
```
47+
class Solution(object):
48+
def isPalindrome(self,s):
49+
"""
50+
:type s: str
51+
:rtype: bool
52+
"""
53+
54+
new=[]
55+
56+
s=s.lower()
57+
58+
for i in s:
59+
if '0'<=i<='9' or 'a'<=i<='z':
60+
new.append(i)
61+
62+
return new==new[::-1]
63+
```

129._sum_root_to_leaf_numbers.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
###129. Sum Root to Leaf Numbers
2+
3+
题目:
4+
<https://leetcode.com/problems/sum-root-to-leaf-numbers/>
5+
6+
7+
难度:
8+
9+
Medium
10+
11+
其实递归不难想到,不过我自己做错在细节方面
12+
13+
如果只有单支,每朝下走一层,代表的数字都增加10, 10* 原本的 + 新节点的数字,最终也是用这个来解
14+
15+
```
16+
class Solution(object):
17+
def sumNumbers(self, root):
18+
"""
19+
:type root: TreeNode
20+
:rtype: int
21+
"""
22+
return self.calSum(root,0)
23+
24+
25+
def calSum(self,root,curSum):
26+
if root == None:
27+
return 0
28+
else:
29+
curSum = curSum * 10 + root.val
30+
if root.left == None and root.right == None:
31+
return curSum
32+
else:
33+
return self.calSum(root.left, curSum) + self.calSum(root.right, curSum)
34+
35+
36+
37+
```

238._product_of_array_except_self.md

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
###238. Product of Array Except Self
2+
3+
题目:
4+
<https://leetcode.com/problems/product-of-array-except-self/>
5+
6+
7+
难度:
8+
9+
Medium
10+
11+
12+
不使用division 并且O(n)
13+
14+
15+
想到的算法 O(n^2)
16+
17+
会超时
18+
19+
20+
```
21+
class Solution(object):
22+
def productExceptSelf(self,nums):
23+
"""
24+
:type nums: List[int]
25+
:rtype: List[int]
26+
"""
27+
lst = []
28+
for i in range(len(nums)):
29+
lst.append(self.productWithoutI(nums,i))
30+
return lst
31+
32+
33+
def productWithoutI(self,nums,i):
34+
product = 1
35+
for j in range(len(nums)):
36+
if j != i:
37+
product *= nums[j]
38+
return product
39+
```
40+
41+
如果用除法,也会有问题,如果有0出现也会变繁琐。
42+
43+
谷歌一下:
44+
45+
46+
解法还是很棒的
47+
48+
output[i] = { i 前面的数的乘积} X { i 后面的数的乘积}
49+
50+
51+
```
52+
class Solution(object):
53+
def productExceptSelf(self,nums):
54+
"""
55+
:type nums: List[int]
56+
:rtype: List[int]
57+
"""
58+
if nums == [] : return []
59+
lft = [1]
60+
rgt = [1]
61+
product = 1
62+
for i in range(1,len(nums)):
63+
product *= nums[i-1]
64+
lft.append(product)
65+
product = 1
66+
for i in reversed(range(1,len(nums))):
67+
product *= nums[i]
68+
rgt.append(product)
69+
rgt.reverse()
70+
result = []
71+
for i in range(len(nums)):
72+
result.append(lft[i]*rgt[i])
73+
return result
74+
75+
```
76+
77+
78+
空间O(n),再看到满足要求的“标准解法”
79+
80+
81+
```
82+
class Solution(object):
83+
def productExceptSelf(self,nums):
84+
"""
85+
:type nums: List[int]
86+
:rtype: List[int]
87+
"""
88+
if nums == [] : return []
89+
size = len(nums)
90+
output = [1] * size
91+
left = 1
92+
for x in range(size-1):
93+
left *= nums[x]
94+
output[x+1] *= left
95+
right = 1
96+
for x in range(size - 1, 0, -1):
97+
right *= nums[x]
98+
output[x-1] *= right
99+
return output
100+
```

0 commit comments

Comments
 (0)