文章目录
Python小白 Leetcode刷题历程 No.46-No.50 全排列、全排列Ⅱ、旋转图像、字母异位词分组、Pow(x,n)
写在前面:
作为一个计算机院的大学生,总觉得仅仅在学校粗略的学习计算机专业课是不够的,尤其是假期大量的空档期,作为一个小白,实习也莫得路子,又不想白白耗费时间。于是选择了Leetcode这个平台来刷题库。编程我只学过基础的C语言,现在在自学Python,所以用Python3.8刷题库。现在我Python掌握的还不是很熟练,算法什么的也还没学,就先不考虑算法上的优化了,单纯以解题为目的,复杂程度什么的以后有时间再优化。计划顺序五个题写一篇日志,希望其他初学编程的人起到一些帮助,写算是对自己学习历程的一个见证了吧。
有一起刷LeetCode的可以关注我一下,我会一直发LeetCode题库Python3解法的,也可以一起探讨。
觉得有用的话可以点赞关注下哦,谢谢大家!
········································································································································································
题解框架:
1.题目,难度
2.题干,题目描述
3.题解代码(Python3(不是Python,是Python3))
4.或许有用的知识点(不一定有)
5.解题思路
6.优解代码及分析(当我发现有比我写的好很多的代码和思路我就会写在这里)
········································································································································································
No.46.全排列
难度:中等
题目描述:
题解代码(Python3.8)
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
def backtrack(path):
if len(path)==l:
res.append(path)
return
for i in range(l):
if block[i] == 1: #判断是否处理过
continue
block[i]=1
backtrack(path+[nums[i]])
block[i]=0
l=len(nums)
block=[ 0 for i in range(l)]
res=[]
backtrack([])
return res
或许有用的知识点:
这道题要用到回溯算法。
解题思路:
套用回溯算法的模板
1.回溯出口:
‘当前结果path的长度==列表的长度’时即为一个有效结果。
2.回溯主体:
先将回溯的范围和答案更新,之后进行剪枝剪枝条件为:该元素已使用过。(剪枝的题最好画画图,就会很容易理解)。
3.状态返回。
No.47.全排列Ⅱ
难度:中等
题目描述:
题解代码(Python3.8)
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
def backtrack