Pascal's Triangle

题目描述

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]
]

题目思路:

把每一行的数据看作一个list,每行的每个数据按顺序存入list中。再把整个一行看作一个整体,存入一个新的list中,这个list的每个元素都是一个list对象。也就是list的嵌套。

分析数字排列结构可以知道,每一行的第一个和最后一个数都是1。每一行的其他位置的数是由上一行对应位置的数a加上a的前一个数的和。对于第一行第二行单独分出即可。

需要注意的是list的下标都是从零开始。

代码1:

import java.util.*;
public class PascalsTriangle {
public ArrayList<ArrayList<Integer>> generate(int numRows) {
//List<List<Integer>>定义一个List,其子元素是List对象,子元素包含的数据是Integer类型
//也就是int的类封装
if (numRows < 0) {
return null;
} ArrayList<ArrayList<Integer>>list = new ArrayList<ArrayList<Integer>>();
//定义一个list作为返回值
if (numRows >= 1) {//大于等于1行时都执行该语句块。
ArrayList<Integer> data = new ArrayList<Integer>();
data.add(1);//把数字1加入到data中
list.add(data);//把data作为元素加入list中,这时第一行数据存储结束
} if (numRows >= 2) {//大于等于2行时都执行该语句块。
ArrayList<Integer> data = new ArrayList<Integer>();
data.add(1);
data.add(1);
list.add(data);//data作为第二行数据存入list中
} if (numRows >=3) {
for (int i = 3; i <=numRows; i++) {
ArrayList<Integer> data = new ArrayList<Integer>();
ArrayList<Integer> prev = list.get(i - 2);//下标从零开始,所以是i-2,这里的i
//等于3在list中实际上是下标为2的元素,其前一个元素是下标为1的元素,也就是
//3-2=1.
data.add(1);//第一个数字为1
//第i行有i个数字,且第1个和第i个数字为1
for (int j = 2; j <= i -1; j++) {//计算第2到i-1个的元素数字。(对应在list的下标是1到i-2)
data.add(prev.get(j - 2) + prev.get(j - 1));//是前一行的第j-1和j的数字和。因为
//下标从零开始,所以对应的下标为j-2和j-1
}
data.add(1);//末尾数字为1 list.add(data);//把第i行加入list
}
} return list;
}
public static void main(String[] args) {
PascalsTriangle test=new PascalsTriangle();
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
list=test.generate(5);
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}

代码2:

import java.util.*;
public class PascalsTriangle {
public ArrayList<ArrayList<Integer>> generate(int numRows) {
ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list = new ArrayList<Integer>();
if(numRows <= 0){
return lists;
}
list.add(1);//上一个判断未执行,则numRows至少为1,
lists.add(new ArrayList<Integer>(list));//无论numRows等于多少,第一行的数据就是1
for(int i = 1; i < numRows; i++){
list.clear();//每次大循环后,list清零
list.add(1);//每行第一个元素为1,对应的下标是0
for(int j = 1; j < i; j++){//下标从1到i-1共i-1个元素。该行一共有i+1个元素,
//i最大为numRows-1,j最大为numRow-2.
list.add(lists.get(i - 1).get(j - 1) + lists.get(i - 1).get(j));
}
list.add(1);//末尾元素为1
lists.add(new ArrayList<Integer>(list));
}
return lists;
}
public static void main(String[] args) {
PascalsTriangle test=new PascalsTriangle();
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
list=test.generate(5);
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}

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,1].

Note:

Could you optimize your algorithm to use onlyO(k) extra space?

题目思路:题目要求空间复杂度为O(k),我们开辟的数组空间受限

import java.util.*;
import java.lang.*;
public class Solution {
public ArrayList<Integer> getRow(int rowIndex) {
int[] last=new int[rowIndex+1];
int[] now=new int[rowIndex+1];
int[] tmp=new int[rowIndex+1];//中间转换数组,因为数组之间的直接赋值是引用
//最后指向和操作的还是同一个数据块
last[0]=1;
for(int i=1;i<=rowIndex;i++){
now[0]=1;
now[i]=1;
for(int j=1;j<i;j++){
now[j]=last[j-1]+last[j];
}
// tmp的作用是交换last和now的引用值。主要是保存当前的now为last,用于
//下次循环的计算,now不能再指向当前的now,应指向其他的数据块,值不必管,
//下次循环计算时now的值会被重新赋值
tmp=last;//tmp指向了last的数据块,
last=now;//last指向了now的数据块
now=tmp;//now指向了last的数据块
} ArrayList ans=new ArrayList<Integer>(); for(int i=0;i<=rowIndex;i++){
ans.add(last[i]);
}
return ans;
}
public static void main(String[] args) {
ArrayList<Integer> mylist=new ArrayList<Integer>();
Solution mytest=new Solution();
mylist=mytest.getRow(4);
System.out.println(mylist);
}
}

leetcode题目解答报告(2)的更多相关文章

  1. leetcode题目解答报告(1)

    Remove Element 题目: Given an array and a value, remove all instances of that value in place and retur ...

  2. LeetCode题目解答

    LeetCode题目解答——Easy部分 Posted on 2014 年 11 月 3 日 by 四火 [Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复 ...

  3. 全部leetcode题目解答(不含带锁)

    (记忆线:当时一刷完是1-205. 二刷88道.下次更新记得标记不能bug-free的原因.)   88-------------Perfect Squares(完美平方数.给一个整数,求出用平方数来 ...

  4. Leetcode题目practice

    目录 Leetcode题目解答 1. 删除最外层的括号 2. 两数之和 3. 宝石与石头 4. 移除元素 5.删除排序数组中的重复项 6.寻找两个有序数组的中位数 7.盛最多水的容器 8.存在重复元素 ...

  5. LeetCode算法题目解答汇总(转自四火的唠叨)

    LeetCode算法题目解答汇总 本文转自<四火的唠叨> 只要不是特别忙或者特别不方便,最近一直保持着每天做几道算法题的规律,到后来随着难度的增加,每天做的题目越来越少.我的初衷就是练习, ...

  6. LeetCode: Permutations 解题报告

    Permutations Given a collection of numbers, return all possible permutations. For example,[1,2,3] ha ...

  7. LeetCode题目答案及理解汇总(持续更新)

    面试算法题 dfs相关 全排列 #include<bits/stdc++.h> using namespace std; const int N = 10; //用一个path数组来存储每 ...

  8. leetcode题目清单

    2016-09-24,开始刷leetcode上的算法题,下面整理一下leetcode题目清单.Github-leetcode 1.基本数学 Two Sum Palindrome Number Cont ...

  9. LeetCode 题目总结/分类

    LeetCode 题目总结/分类 利用堆栈: http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ http://oj.l ...

随机推荐

  1. UVa11021 Tribles

    概率 递推 每只麻球都是独立计算的. 可以递推,设f[i]表示一只麻球经过i天死光的概率,那么f[i]的k次方就是k只麻球经过i天死光的概率. 则f[i]=p[0]+p[1]*f[i-1]^1+p[2 ...

  2. Codeforces 842C Ilya And The Tree 树上gcd

    题目链接 题意 给定一棵根为\(1\)的树.定义每个点的美丽值为根节点到它的路径上所有点的\(gcd\)值.但是对于每个点,在计算它的美丽值时,可以将这条路径上某个点的值变为\(0\)来最大化它的美丽 ...

  3. 快充 IC BQ25896 的 ICO (input current optimizer)

    ICO (input current optimizer) 手機接上 adapter 後, 手機裡的 charger IC bq25896 開始向 adapter 抽取 current 供給 batt ...

  4. Office文件上传自动生成缩略图-C#开发

    原文: http://www.knowsky.com/898407.html 上传office文件的时候需要将首页自动截图,用于显示文件列表的时候将文件第一页缩略图展示给用户.实现的方式有多种,这里给 ...

  5. vs-插件+配置

    { "window.zoomLevel": 0, "files.autoSave": "off", "editor.fontSiz ...

  6. HDU 1969 Pie【二分】

    [分析] “虽然不是求什么最大的最小值(或者反过来)什么的……但还是可以用二分的,因为之前就做过一道小数型二分题(下面等会讲) 考虑二分面积,下界L=0,上界R=∑ni=1nπ∗ri2.对于一个中值x ...

  7. jenkins发布java项目

    前言:这台jenkins服务器的环境是前几篇博客一步步做实验做过来,如果有想做这篇博客的实验的朋友,可以移驾去看一下前几篇博客,另外有看着博客做完的博友,可以在下方留言,证明我做的这些都是对的,有看着 ...

  8. Java---详解方法传值问题

    过程解析: 1.首先执行int[] arr={3,5,6,1,7,9,0},遇到数组先执行等式右边的,{3,5,6,1,7,9,0}会在堆内存中开辟一块空间,分成7小块,下标分别从0~6,先进行系统初 ...

  9. JS没有contains方法,可以用indexof实现

    我们很多时候会不自觉的在js代码里对一个字符串进行如下操作: str.contains("substr"); 但是js里面没有这个方法去判断字符串str是不是包含substr,而j ...

  10. HttpClient的Post请求数据

    最近在项目中需要添加Post请求数据,以前的Get请求是使用JDK自带的URLConnection.在项目组人员的推荐下,开始使用HttpClient. HttpClient简介: HttpClien ...