Pascal's Triangle

 Total Accepted: 43914 Total Submissions: 145531My Submissions

Question Solution 


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

分析,数据特点是,当前行可由上一行计算求得,计算方式,A[n][m]=A[n-1][m]+A[n-1][m-1]

public class Solution {

    public List<List<Integer>> generate(int numRows) {

        List<List<Integer>> x=new ArrayList<List<Integer>>();

        

        if(numRows<1)

            return x;

        else if(numRows==1)

        {

            List<Integer> y=new ArrayList<Integer>();

            y.add(1);

            x.add(y);

            return x;

        }

        else if(numRows==2)

        {

            List<Integer> y=new ArrayList<Integer>();

            y.add(1);

            x.add(y);

            y=new ArrayList<Integer>();

            y.add(1);

            y.add(1);

            x.add(y);

            return x;

        }

        else

        {

            List<Integer> y=new ArrayList<Integer>();

            y.add(1);

            x.add(y);

            y=new ArrayList<Integer>();

            y.add(1);

            y.add(1);

            x.add(y);

            int v=3;

            int listsize=2;

            while(v<=numRows)

            {

                y=new ArrayList<Integer>();

                int size=x.get(listsize-1).size();

                //int[] z=new int[size+1];

                //z[0]=1;

                y.add(1);

                for(int i=1;i<size;i++)

                    y.add(x.get(listsize-1).get(i-1)+x.get(listsize-1).get(i));

                y.add(1);

                x.add(y);

                /*

                y=new ArrayList<Integer>();

                int[] z=new int[v/2+1];

                for(int i=0;i<(v+1)/2;i++)

                {

                    z[i]=1+i*(v-2);

                    y.add(z[i]);

                }

                if(v%2==0)

                {

                    for(int i=(v+1)/2-1;i>=0;i--)

                        y.add(z[i]);

                }

                else

                {

                    for(int i=(v+1)/2-2;i>=0;i--)

                        y.add(z[i]);

                }

                x.add(y);

                */

                listsize++;

                v++;

            }

            return x;

        }

    }

}