leetcode 【 Pascal's Triangle II 】python 实现

题目

Given an index k, return the kth row of the Pascal‘s triangle.

For example, given k = 3,
Return [1,3,3,1].

Note:
Could you optimize your algorithm to use only O(k) extra space?

代码:oj测试通过 Runtime: 48 ms

 1 class Solution:
 2     # @return a list of integers
 3     def getRow(self, rowIndex):
 4         if rowIndex == 0:
 5             return [1]
 6         if rowIndex == 1:
 7             return [1,1]
 8         pascal = [1,1]
 9         for i in range(1,rowIndex):
10             for j in range(len(pascal)-1):
11                 pascal[j] = pascal[j] + pascal[j+1]
12             pascal.insert(0,1)
13         return pascal

思路:

先把special case单列出来

每轮迭代从前向后更新数组的每个元素

最后再在第一位补上一个1

另,网上有很多题解是每轮从后往前遍历,这样的效率似乎更高一些。

后续又把遍历的顺序改为由后向前,结果如下

oj测试通过  Runtime: 37 ms

代码

 1 class Solution:
 2     # @return a list of integers
 3     def getRow(self, rowIndex):
 4         if rowIndex == 0:
 5             return [1]
 6         if rowIndex == 1:
 7             return [1,1]
 8         pascal = [1,1]
 9
10         # from start to end
11         #for i in range(1,rowIndex):
12         #    for j in range(len(pascal)-1):
13         #        pascal[j] = pascal[j] + pascal[j+1]
14         #    pascal.insert(0,1)
15
16         # from end to start
17         for i in range(1, rowIndex):
18             for j in range(len(pascal)-1, 0, -1):
19                 pascal[j] = pascal[j] + pascal[j-1]
20             pascal.insert(len(pascal),1)
21         return pascal

确实从后向前遍历比从前向后遍历要快很多。

小白对Python原理不懂,分析可能的原因如下:

1. 在数据起始位置insert,需要改变数组后续所有元素在内存中的位置,因此耗时长?

2. 在数组末尾insert,不需要改变数组之前所有元素在内存中的位置,只补上最后一个新增元素的位置就行了,因而速度快?

leetcode 【 Pascal's Triangle II 】python 实现

时间: 2024-10-12 22:24:40

leetcode 【 Pascal's Triangle II 】python 实现的相关文章

【leetcode】Pascal's Triangle II (python)

其实每一行的结果是二项式展开的系数,但是考虑到当给定的参数过大的时候,在求组合的过程中会出现溢出(中间过程要用到乘法),但是这样的算法的时间复杂度是O(N),所以在参数不太大的时候,还是不错的. 这里用迭代的方法来求,当然复杂度就高了,是O(N^2),这里主要说下迭代时候的技巧,即在一个列表(数组)里进行迭代,实现如此的操作,要求在求下一行的时候,要从后往前进行,若是从前向后,就把后面要用的变量给改掉了,产生"脏"数据.从后向前不会(为何?),因为下一行比上一行多一个.(自己写写例子看

LeetCode——Pascal's Triangle II

Description: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. public class Solution { public List<Integer> getRow(int rowIndex) { List<List<Integer>> list = new ArrayList<List&

LeetCode: Pascal&#39;s Triangle II 解题报告

Pascal's Triangle II Total Accepted: 19384 Total Submissions: 63446 My Submissions Question SolutionGiven an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. Note:Could you optimize your algorithm to us

(LeetCode)Pascal&#39;s Triangle II --- 杨辉三角进阶(滚动数组思想)

Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra space? Subscribe to see which companies asked this question 解题分析: 此处有空间的限制,因此不能正

LeetCode Pascal&#39;s Triangle II (杨辉三角)

题意:给出杨辉三角的层数k,返回最后一层.k=0时就是只有一个数字1. 思路:滚动数组计算前一半出来,返回时再复制另一半.简单但是每一句都挺长的. 1 class Solution { 2 public: 3 vector<int> getRow(int rowIndex) { 4 if(rowIndex==0) return vector<int>(1,1); //0和1特殊处理 5 if(rowIndex==1) return vector<int>(2,1); 6

LeetCode: Pascal&#39;s Triangle II [119]

[题目] Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra space? [题意] 给定行索引k, k从0开始,返回该索引指向的杨辉三角的行 要求只能使用O(k)的额外空间 [思路] 申请两个k+1大小的数组,

Pascal&#39;s triangle II Leetcode Python

Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra space? 这题和前面一题的区别在于不用返回所有解,只需要返回index对应行就行.做法和前面的一样定义一个currow 和prerow class Solu

[LeetCode] 119. Pascal&#39;s Triangle II 杨辉三角 II

Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. Note:Could you optimize your algorithm to use only O(k) extra space? 118. Pascal's Triangle 的拓展,给一个索引k,返回杨辉三角的第k行. 解法:题目要求优化到 O(k) 的空间复杂,那么就不能把每

LeetCode开心刷题五十一天——118. Pascal&#39;s Triangle 接触跳转表概念,不知用处 lamda逗号导致表达式加法奇怪不理解119. Pascal&#39;s Triangle II

118. Pascal's Triangle Easy 87984FavoriteShare Given a non-negative integer numRows, generate the first numRows of Pascal's triangle. In Pascal's triangle, each number is the sum of the two numbers directly above it. Example: Input: 5 Output: [ [1],