摘要:
阶乘法 思路: 因为集合[1,2,3,...,n]共有n!种排列,则[1,2,3,...,n-1]有(n-1)!种排列。由此可以看出,在[1,2,3,...,n]所有的排列中,第一位有n种可能,为1--n,并且每个确定的第一位数均有(n-1)!种排列。同理,在确定第二位数的情况下,有(n-2)!种排 阅读全文
摘要:
模拟 思路: 参考54.螺旋矩阵 代码: class Solution: def generateMatrix(self, n: int) -> List[List[int]]: res = [[0]*n for _ in range(n)] dc = [1,0,-1,0] dr = [0,1,0, 阅读全文
摘要:
遍历查找 思路: 由于可能出现最后是空格的情况,所以从字符串尾部遍历,先找到不是空格的位置,然后从不是空格的位置继续找到是空格的位置,二者相减,即为最后一个单词的长度。 思路: class Solution: def lengthOfLastWord(self, s: str) -> int: en 阅读全文
摘要:
遍历添加 思路: 由于原数组有序,可以遍历把要添加区间之前的区间先加入到结果中,在判断要添加的区间是否能和之前合并,接着继续遍历之后区间,如果能合并就合并区间,不能合并直接添加。合并区间方法,参考56.合并区间 代码: class Solution: def insert(self, interva 阅读全文
摘要:
排序合并 思路: 用数组res记录合并结果,先把数组intervals排序,遍历数组intervals,如果res为空或者遍历的区间左边界比res中最后一个区间的右边界值大,则将遍历的区间添加到结果中,如果遍历的区间左边界比res最后一个区间的右边界值小,则更新res最后一个区间的右边界的值。 代码 阅读全文
摘要:
贪心算法 思路: 参考45. 跳跃游戏 II 代码: class Solution: def canJump(self, nums: List[int]) -> bool: n,maxindex = len(nums),0 for i in range(n): if i <= maxindex: m 阅读全文
摘要:
模拟 思路: 遍历元素,每当路径要超出界限或者进入之前访问的单元格时,会顺时针旋转方向。 代码: class Solution(object): def spiralOrder(self, matrix): if not matrix: return [] R, C = len(matrix), l 阅读全文
摘要:
动态规划 思路: 由于题目只要求得到最大和,故可以遍历数组nums,遍历的同时把每个元素的值更新为当前位置到之前所能得到的最大和,遍历完成后返回数组中最大值即可。更新的动态规划转移方程为:nums[i] = nums[i] + max(nums[i-1],0) 代码: class Solution: 阅读全文
摘要:
回溯法 思路: 参考51.N皇后 代码: class Solution: def totalNQueens(self, n: int) -> int: def could_place(row,col): return not(cols[col]+hill_diagonal[row-col]+dale 阅读全文
摘要:
回溯法 思路: 参考37.解数独。在约束条件判断中,主对角线row-col = 常数, 副对角线 row+col = 常数。 代码: class Solution: def solveNQueens(self, n: int) -> List[List[str]]: def could_place( 阅读全文