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 ...
随机推荐
- js-浅显基础-正则表达式集
今天进博客园,忽然发现我也是有粉丝的人啦!!!!!!!!谢谢谢谢关注(爱心爱心) 本来不想做这个笔记的,但是每次都百度我自己都烦死了,所以还是自己整理一下方便我后期使用: 独笑笑不如众笑笑,放轻松点 ...
- 根据ipnut的maxlength实时提示输入的字符长度
$(function(){ $("body").on("focus","input,textarea", function() { if(! ...
- 串口VMIN VTIME 详解
原文地址: 以前跟着做过VxWorks的开发,主要通信方式是串口,因为底层BSP包已经做好了,串口通信非常简单.后来接触Linux,在一块OK6410上跑Linux串口通信,才发现原来天真的以为甚是简 ...
- 第4章 使用 Spring Boot
使用 Spring Boot 本部分将详细介绍如何使用Spring Boot. 这部分涵盖诸如构建系统,自动配置以及如何运行应用程序等主题. 我们还介绍了一些Spring Boot的最佳实践(best ...
- ubuntu允许mysql远程连接
ubuntu允许mysql远程连接 第一步: vim /etc/MySQL/my.cnf找到bind-address = 127.0.0.1 注释掉这行,如:#bind-address = 127.0 ...
- 精简版的MySQL制作步骤
1.删除所有的目录,只保留 datasharebin 2.删除BIN下面除以下三个文件之外的所有文件: libmysql.dll(MYSQL5中的文件,在MYSQL5.5中不存在)mysqladmin ...
- PHP 实现Word,excel等转换pdf
近期做一个项目,须要将用户上传的word,excel文档转成PDF文档保存并打印.在网上找了非常多资料.并不全面,所以自己写了一份比較全面的教程来分享. 以下是操作步骤: 1. 安装免费 ...
- Web知识点收集
1.微信屏蔽浏览器,打开办法: 如果微信webapp屏蔽了浏览器打开,通常是通过判断代理类型来做到的. 解决办法:进入浏览器开发者模式,修改浏览器代理为: Mozilla/5.0 (iPhone; C ...
- 构造方法后面带:this()
可以这么理解,有参数的构造函数需要执行无参构造函数中的代码,为了省去重复代码的编写,所以就继承了,先执行没参数的那个构造函数. 在this上“转到定义”(F12)就到第一个构造函数上去了.
- 使用excel进行数据挖掘(5)---- 应用场景分析
使用excel进行数据挖掘(5)---- 应用场景分析 在配置环境后,能够使用excel进行数据挖掘. 环境配置问题可參阅: http://blog.csdn.net/xinxing__8185/ar ...