Pascals Triangle
Updated:
파스칼의 삼각형 문제이다
이 문제는 이항계수를 이용하여 문제를 풀수있다.
dp[n][m] : nCm이라고 정의를 하자, 즉 n개중에 m개를 순서없이 고르는 경우의수이다
dp[n][m] = dp[n-1][m]+dp[n-1][m-1], 단 m>=1,n>=1이상이다
그리고 n과 m이 같거나 , m이 0인경우는 1로 처리를 해준다
by Java
class Solution {
public List<List<Integer>> generate(int numRows) {
if(numRows==0) return new ArrayList<>();
int[][] dp = new int[numRows][numRows];
for(int i=0;i<numRows;i++) {
for(int j=0;j<numRows;j++) {
dp[i][j]=-1;
}
}
dp[0][0]=1;
for(int i=0;i<numRows;i++) go(dp,numRows-1,i);
List<List<Integer>> ans = new ArrayList<>();
for(int i=0;i<numRows;i++) {
List<Integer> temp = new ArrayList<>();
for(int j=0;j<=i;j++) {
temp.add(dp[i][j]);
}
ans.add(temp);
}
return ans;
}
private int go(int[][] dp,int n,int m) {
if(m==0 || n==m) {
dp[n][m]=1;
return dp[n][m];
}
if(dp[n][m]!=-1) return dp[n][m];
dp[n][m]=0;
dp[n][m]=go(dp,n-1,m-1)+go(dp,n-1,m);
return dp[n][m];
}
}
Leave a comment