leetcode题目解答报告(2)
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?
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)的更多相关文章
- leetcode题目解答报告(1)
Remove Element 题目: Given an array and a value, remove all instances of that value in place and retur ...
- LeetCode题目解答
LeetCode题目解答——Easy部分 Posted on 2014 年 11 月 3 日 by 四火 [Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复 ...
- 全部leetcode题目解答(不含带锁)
(记忆线:当时一刷完是1-205. 二刷88道.下次更新记得标记不能bug-free的原因.) 88-------------Perfect Squares(完美平方数.给一个整数,求出用平方数来 ...
- Leetcode题目practice
目录 Leetcode题目解答 1. 删除最外层的括号 2. 两数之和 3. 宝石与石头 4. 移除元素 5.删除排序数组中的重复项 6.寻找两个有序数组的中位数 7.盛最多水的容器 8.存在重复元素 ...
- LeetCode算法题目解答汇总(转自四火的唠叨)
LeetCode算法题目解答汇总 本文转自<四火的唠叨> 只要不是特别忙或者特别不方便,最近一直保持着每天做几道算法题的规律,到后来随着难度的增加,每天做的题目越来越少.我的初衷就是练习, ...
- LeetCode: Permutations 解题报告
Permutations Given a collection of numbers, return all possible permutations. For example,[1,2,3] ha ...
- LeetCode题目答案及理解汇总(持续更新)
面试算法题 dfs相关 全排列 #include<bits/stdc++.h> using namespace std; const int N = 10; //用一个path数组来存储每 ...
- leetcode题目清单
2016-09-24,开始刷leetcode上的算法题,下面整理一下leetcode题目清单.Github-leetcode 1.基本数学 Two Sum Palindrome Number Cont ...
- LeetCode 题目总结/分类
LeetCode 题目总结/分类 利用堆栈: http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ http://oj.l ...
随机推荐
- net3:DropDownList的动态绑定
原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System.Data;using System.Configuration;using System ...
- AC日记——货车运输 codevs
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descri ...
- CSS-文本(中,英)
1.缩进文本:text-indent 2.水平对齐:text-align: left/center/right/justify(实现两端对齐文本效果) 3.字间隔:word-spacing(可以改变 ...
- LA 3708 Graveyard
题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...
- JavaScript 中那些关于坐标和距离的属性与方法
一 前言 在前端开发中总会遇到各种各样需要使用或计算坐标和距离的情况,但是这些属性和方法众多,全部熟练地记下来并非是一件易事,大多只能现查,耗费不少时间精力,于是便有了整理记录的想法,即加深了印象,又 ...
- 洛谷——P1238 走迷宫
P1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数 ...
- Maven 项目打包发布
在Eclipse左侧右击项目,Debug As -> Debug Configurations -> 双击Maven Build 然后看弹出框的右侧右侧的Name随便填写一个名字,Base ...
- mysql InnoDb存储引擎索引
B+树索引:使用B+树索引查找数据时,并不能找到一个给定键值的具体行,只是找到被查找数据行所在的页,然后数据库通过把页读取到内存,再在内存中进行查找,最后得到要查找的数据. 聚集索引:按照表中主键构造 ...
- MySQL的1067错误
1.打开my.ini文件,找到default-storage-engine=InnoDB这一行,把它改成default-storage-engine=MyISAM.*** my.ini必须为ansi格 ...
- DevExpress控件GridControl使用 z
设置选中行的背景色.而不改变前景色. EnableAppearanceFocusedCell = False, EnableAppearanceFocusedRow = False private v ...