本文是在学习中的总结,欢迎转载但请注明出处: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的更多相关文章

  1. [LeetCode] Triangle 三角形

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  2. [LeetCode] Pascal'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. [LeetCode] Pascal's Triangle 杨辉三角

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  4. 【leetcode】Pascal's Triangle II

    题目简述: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Retur ...

  5. 【leetcode】Pascal's Triangle

    题目简述: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5 ...

  6. POJ 1163 The Triangle(简单动态规划)

    http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  7. Triangle - Delaunay Triangulator

    Triangle - Delaunay Triangulator  eryar@163.com Abstract. Triangle is a 2D quality mesh generator an ...

  8. LeetCode 118 Pascal's Triangle

    Problem: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows  ...

  9. LeetCode 119 Pascal's Triangle II

    Problem: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Ret ...

随机推荐

  1. page1

    1.1 常用的客户端技术:HTML. CSS. 客户端脚本技术 1.2 常用的服务器端技术:CGI .ASP .PHP (一种开发动态网页技术).ASP.NET(是一种建立动态web应用程序的技术,是 ...

  2. Node.js URL

    稳定性: 3 - 稳定 这个模块包含分析和解析 URL 的工具.调用 require('url') 来访问模块. 解析 URL 对象有以下内容,依赖于他们是否在 URL 字符串里存在.任何不在 URL ...

  3. OC基础之可循环滚动并突出中间图片,并且可点击

    前两天一哥们儿让我帮他写一下:可循环滚动并突出中间图片,并且可点击的一种滑动视图的效果,今天放在这里给大家展示一下,具体文字代码中都有注解,代码还有待完善,不喜勿喷,转载请注明,下载请点星,谢谢~ - ...

  4. 《读书报告 -- Elasticsearch入门 》-- 安装以及简单使用(1)

    <读书报告 – Elasticsearch入门 > 第一章 Elasticsearch入门 Elasticsearch是一个实时的分布式搜索和分析引擎,使得人们可以在一定规模上和一定速度上 ...

  5. (译)openURL 在 iOS10中已弃用

    翻译自:openURL Deprecated in iOS10 译者:Haley_Wong 苹果在iOS 2 推出了 openURL:方法 作为一种打开外部链接的方式.而与之相关的方法 canOpen ...

  6. 【伯乐在线】100个高质量Java开发者博客

    本文由 ImportNew - 夏千林 翻译自 programcreek.欢迎加入翻译小组.转载请见文末要求. ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博 ...

  7. static修饰符详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  8. ORACLE时间日期格式使用总结(参考网上资料汇总)

    Oracle时间日期操作 sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟 ...

  9. [安全]Back_Track_5 vm 版安装和使用

    下载安装 下载使用国内的镜像  http://mirrors.ustc.edu.cn/kali-images/kali-1.0.9/ 我这里是vm9.0 下载之后解压,然后打开vm,然后 文件--&g ...

  10. GC真正的垃圾:强、软、弱、和虚 对象

    垃圾回收的基本思想就是判断一个对象是否可触及性,说白了就是判断一个对象是否可以访问,如果对象对引用了,说明对象正在被使用,如果发现对象没有被引用,说明对象已经不再使用了,不再使用的对象可以被回收,但是 ...