1. 程式人生 > >LeetCode-118.楊輝三角(java程式碼)

LeetCode-118.楊輝三角(java程式碼)

  1. 此處僅貼參考程式碼(程式碼可繼續調優,但平臺Accepted了,留點思考空間~)

public List<List<Integer>> generate(int numRows) {
		List<List<Integer>> list = new ArrayList<List<Integer>>() ;
		for(int i=1;i<=numRows;i++) {
			Integer num;  //用於記錄第 i 行第 j 個數的值
			List<Integer> tmpList = new ArrayList<Integer>();
			for(int j=1;j<=i;j++) {
				num = pac(i-1,j-1);  //計算第 i 行第 j 個數的值--->排列組合法
				tmpList.add(num);
			}
			list.add(tmpList);  //將第 i 行的 i 個數的 tmpList 存到 List 空間
		}
		return list;
	}

	public Integer pac(int i,int j) {  //計算排列組合C(i)(j)
		BigInteger denominator = new BigInteger("1");  //分子
		BigInteger molecule=new BigInteger("1");  //分母
		int time = j; //執行次數
		if((i==0) || (j==0) || (i==j))  //楊輝三角的兩側都是 1
			return 1;
		for(int k=0;k<time;k++) {
			denominator = denominator.multiply(new BigInteger(String.valueOf(i)));
			molecule = molecule.multiply(new BigInteger(String.valueOf(j)));
			i--;
			j--;
		}
		Integer return_num = Integer.parseInt(String.valueOf(denominator.divide(molecule)));
		return return_num;
	}