39. 组合总和
题目链接:https://leetcode.cn/problems/combination-sum/
0x1 看到题目的第一想法
0x2 自己实现过程中遇到哪些困难
- 剪枝那里不是直接return 是continue
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 组合问题
- 回溯
0x5 今日收获,记录一下自己的学习时长
- 45min
40.组合总和II
题目链接:https://leetcode.cn/problems/combination-sum-ii/
0x1 看到题目的第一想法
0x2 自己实现过程中遇到哪些困难
- 出现重复组合
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- candidate中有重复元素,要求结果组合中不能出现重复组合
- 去重操作
1 | class Solution: |
0x5 今日收获,记录一下自己的学习时长
- 1h
131. 分割回文串
题目链接:https://leetcode.cn/problems/palindrome-partitioning/
0x1 看到题目的第一想法
0x2 自己实现过程中遇到哪些困难
- 剪枝要用countinue,不能是直接return
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- python判断回文
- 例如给定字符串”abcde”, 在已知”bcd”不是回文字串时, 不再需要去双指针操作”abcde”而可以直接判定它一定不是回文字串
- s[0:n-1]是回文,s[0:n]才有可能是回文
1
tmp =?= tmp[::-1]
- startIdx控制下一个回文子串的起始位置,i来寻找截止位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21class Solution:
def partition(self, s: str) -> List[List[str]]:
path = []
res = []
def backtrack(s, startIdx):
if(startIdx >= len(s)):
res.append(path[:])
for i in range(startIdx, len(s)):
tmp = s[startIdx: i+1]
print(tmp)
# 判断回文
# 剪枝
if(tmp != tmp[::-1]):
continue
path.append(tmp)
backtrack(s, i+1)
path.pop()
backtrack(s, 0)
return res0x5 今日收获,记录一下自己的学习时长
- 1.5h
待重点复习
40, 131
总结
- 回溯
- 去重
- 分割回文串