题目:题目本身不存在问题,生成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 }