本文是在学习中的总结,欢迎转载但请注明出处: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. javaweb面试题

    1.Tomcat的优化经验 答:去掉对web.xml的监视,把JSP提前编辑成Servlet:有富余物理内存的情况下,加大Tomcat使用的JVM内存. 2.什么是Servlet? 答:可以从两个方面 ...

  2. FileOutputStream&FileInputStream&异常的使用

    FileOutputStream&FileInputStream&异常的使用 我们总觉得历史是极其遥远的东西,与我们并无关联,又觉得历史隐藏在图书馆的旧书之中. 然而,我们每个人都有真 ...

  3. 如何恢复Initial commit之前的源文件

    在github新建了一个空的库,然后到本地文件夹下,git init了一下,将remote和本地的关联起来了,然后git pull了一下,本地的项目源码全没了,用以下命令可以帮你恢复 git refl ...

  4. CDH 5.x 集群安装及卸载

    上次写了CDH安装测试总结,由于那个博客篇幅略长, 但是主要集中在第二章,所以单独把CDH安装.卸载这块的内容拉出来在一篇记录一下. 一.搭建远程yum源 1.启动http服务: service ht ...

  5. (一二九)获取文件的MineType、利用SSZipArchive进行压缩解压

    MineType 简介 文件在网络上以二进制流的方式传播,为了区分不同的文件类型,用MineType来标明. 为什么要获取 文件的拓展名较短,比较好记,但是MineType是很长的,比如docx拓展名 ...

  6. NewSQL数据库VoltDB特性简介

    VoltDB是一个革命性的新型数据库产品,被称作NewSQL数据库.它基于H-Store,号称比当前数据库产品的吞吐量高45倍,同时又具有很高的扩展性.它的特性主要有以下几点: Ø  高吞吐.低延迟: ...

  7. ArrayList、HashMap、HashSet源码总结

    ArrayList: 1. ArrayList是List接口的大小可变数组的实现,此实现是不同步的. 2. ArrayList内部使用类型为Object[]的数组存储元素. 3. ArrayList默 ...

  8. Dynamics CRM2013/2015 检索实体属性的两种方式

    昨天有朋友问起如何查询一个字段属性是否存在于某个实体中,一般这个问题我们会采取最直观的查询方式即MetadataBrowser,该工具是一个zip解决方案包在SDK中的如下目录内"\SDK\ ...

  9. iOS常见控件的基本使用

    UI相关类继承关系 UIView 常见属性和方法 UIView属性 UIView方法 UIControl 常用控件 UIImageView 图片显示控件android ImageView UISlid ...

  10. android 填满手机磁盘空间方法

    http://blog.csdn.net/fulinwsuafcie/article/details/9700619 很多时候我们需要进行临界测试. 譬如当手机盘空间存满的条件下应用会有何表现等. 之 ...