[leetcode]_Pascal's Triangle

题目:题目本身不存在问题,生成Pascal三角。

注意:

  ArrayList的使用:

  1、ArrayList申请二维数组

1  ArrayList<ArrayList<Integer>>  result = new ArrayList<ArrayList<Integer>>();

  2、操作:

1   ArrayList<Integer> one = new ArrayList<Integer>();
2   one.add(1);
3   result.add(one); //在二维List中添加一个List
4   result.get(0).get(0); //访问第1个List的第1个元素

  3、疑问,为什么使用a.clear()和注释掉的两句,res里的之前add进去的内容会有所改变?

1   ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
2   ArrayList<Integer> a = new ArrayList<Integer>();
3   a.add(1);
4   res.add(a);
5         
6   a.clear();
7         
8   //ArrayList<Integer> b = new ArrayList<Integer>();
9   //a = b;

  答:使用a.clear(),a指向的那块内存区域的值被洗掉,因此res中add进去的内容同步被洗掉。使用注释掉的两个语句,是将a指向了b指向的内存区域,原来指向的内存区域的那块值并没有改变,这也是为什么a的值被清空了,res中add进去的内容不会改变。

代码:

 1 public ArrayList<ArrayList<Integer>> generate(int numRows) {
 2        ArrayList<ArrayList<Integer>>  result = new ArrayList<ArrayList<Integer>>();
 3        
 4        if(numRows == 0) return result;
 5        
 6        ArrayList<Integer> pre = new ArrayList<Integer>();
 7        pre.add(1);
 8        result.add(pre);
 9        if (numRows == 1) return result;
10        
11        for(int index = 2 ; index <= numRows ; index++){
12            ArrayList<Integer> help = new ArrayList<Integer>();
13            help.add(1);
14            for(int i = 0 ; i < pre.size() - 1 ; i++){
15                help.add(pre.get(i) + pre.get(i + 1));
16            }
17            help.add(1);
18            result.add(help);
19            
20            pre = help;    //只是改变了pre指向的内容,因此add进result的内容不会改变
21        }
22        return result;
23     }
原文地址:https://www.cnblogs.com/glamourousGirl/p/3751247.html