Leetcode_118_Pascal's Triangle
来源:互联网 发布:js获取el表达式的对象 编辑:程序博客网 时间:2024/06/07 14:09
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41827325
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]
思路:
(1)这道题所说的Pascal's Triangle实质就是杨辉三角,题意是给定整数N,输出杨辉三角中1-N行中包括的所有数字。
(2)大家肯定都挺熟悉杨辉三角,对于三角中每一行:每行数字的个数和行数相等,第一个和最后一个数字是1,中间任意一个数字是该数字对应在该行正上方两数字的和。
(3)首先,创建LinkedList来存放每一行的数字,由于三角中第1行和第2行比较特殊,需单独进行判断和处理。
(4)其次,循环遍历N次,正好对应N行,行数等于1和等于2分别返回对应值;如果行数大于2,则需遍历,如果遍历到该行第一个元素和最后一个元素则将1加入临时链表row中,对于中间的元素,肯定是其前一行对应元素相加(如果在m(m>2)行中,某一元素为k(1<k<m-1),则k的值为m-1行中的第k-1个元素和低k个元素相加),由于已经把前2行数字按顺序存入rows中,所以取到指定元素顺序不会发生变化。
(5)最后,每遍历一行就将得到的临时链表存入rows中,在遍历下一行时就能按照行数获取到上一行的数字,从而得到这一行中间任意数字的值。
(6)这道题还是比较简单的。本文仅提供一种解题思路,对于时间效率和空间效率的优化暂未考虑,希望对你有所帮助,谢谢。
算法代码实现如下所示:
public static List<List<Integer>> getAll(int num) {List<List<Integer>> rows = new LinkedList<List<Integer>>();//num太大可能越界for (int i = 1; i <= num; i++) {List<Integer> row = new LinkedList<Integer>();if (i == 1) {row.add(1);}if (i == 2) {row.add(1);row.add(1);}if (i >= 3) {for (int j = 0; j < i; j++) {if (j == 0) {row.add(1);}else if (j == i - 1) {row.add(1);}else if (j != 0 && j != i - 1) {List<Integer> list = rows.get(i - 2);row.add(list.get(j - 1) + list.get(j));}}}rows.add(row);}return rows;}
当N=10时,运行结果如下所示:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
- Leetcode_118_Pascal's Triangle
- leetcode_118_Pascal's Triangle
- Pascal's Triangle、Pascal's Triangle II
- Pascal's Triangle , Pascal's Triangle II
- Pascal's Triangle Pascal's Triangle||
- Pascal's Triangle & Pascal's Triangle II
- Pascal's Triangle && Pascal's Triangle II
- LeetCode Pascal's Triangle
- [Leetcode] Pascal's Triangle
- LeetCode: Pascal's Triangle
- Pascal's Triangle
- Pascal's Triangle II
- [LeetCode] Pascal's Triangle
- 【leetcode】Pascal's Triangle
- [118]Pascal's Triangle
- Pascal's Triangle
- Pascal's Triangle II
- LeetCode - Pascal's Triangle
- ILog项目开发流程【一】
- 简析 addToBackStack使用和Fragment执行流程
- 第十四周项目5:体会棋盘游戏中的数据存储
- 第一题
- 数据库特殊字符,‘()查询
- Leetcode_118_Pascal's Triangle
- java小问题
- sql server查询所有表名、字段名、类型、长度 和 存储过程、视图 的创建语句
- iOS textField属性详解
- javascript 利用ajax读取json数据
- easyui 琐事
- NOJ1114合法日期——interesting带星期,一个神奇的公式
- 指针形式参数匹配问题
- JForum2.1.9 安装过程