给定一个非负索引值 num ,请返回杨辉三角中从上到下第 num 层。索引值从 0 开始。
杨辉三角中,每个数是左上方和右上方的数之和。
例如当输入3时,对应的输出为[1,3,3,1],
杨辉三角的第3行(从0开始算起)部分如下图蓝色部分所示:
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型 * @return int整型一维数组 */ public int[] getRow (int num) { // write code here if(num == 0){ return new int[]{1}; }else if(num == 1){ return new int[]{1, 1}; }else{ // 先构建第二层 List<Integer> lastLayer = new ArrayList<>(); lastLayer.add(1); lastLayer.add(1); List<Integer> layer = new ArrayList<>(); for(int i = 2; i <= num; i++){ layer.clear(); layer.add(1); for(int k = 1; k < i; k++){ layer.add(lastLayer.get(k) + lastLayer.get(k - 1)); } layer.add(1); lastLayer = new ArrayList<>(layer); } // 把列表结果转成数组 int[] res = new int[layer.size()]; for(int i = 0; i < layer.size(); i++){ res[i] = layer.get(i); } return res; } } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型 * @return int整型一维数组 */ public int[] getRow (int num) { // write code here // write code here int[][] arr = new int[num + 1][]; for (int i = 0; i <= num; i++) { arr[i] = new int[i + 1]; for (int j = 0; j <= i; j++) { if ( j == 0 || j == i) { arr[i][j] =1; } else { arr[i][j] = arr[i -1 ][j] + arr[i -1 ][j - 1]; } } } return arr[num]; } }
class Solution { public: /** * 动态规划+滚动数组实现,倒序实现状态转移,防止状态覆盖 * @param num int整型 * @return int整型vector */ vector<int> getRow(int num) { vector<int> res; for (int i = 0; i <= num; i++) { res.push_back(1); for (int j = i - 1; j > 0; j--) { res[j] = res[j] + res[j - 1]; } } return res; } };
package main import _"fmt" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型 * @return int整型一维数组 */ func getRow( num int ) []int { pre:=[]int{1} for i:=1;i<=num;i++{ tmp:=make([]int,i+1) for j:=0;j<i+1;j++{ if j-1<0||j==i{ tmp[j]=1 }else{ tmp[j]=pre[j-1]+pre[j] } } pre=tmp } return pre }
public int[] getRow (int n) { // write code here int num=n+1; int arr[][] =new int [num][]; for(int i=0;i<num;i++){ arr[i]=new int [i+1]; for(int j=0;j<i+1;j++){ if(j!=0&&j!=i){ arr[i][j]=arr[i-1][j-1]+arr[i-1][j]; }else{ arr[i][j]=1; } } } return arr[num-1]; }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型 * @return int整型一维数组 */ public int[] getRow (int num) { if(num == 0){ return new int[]{1}; } int[][] dp = new int[2][num + 1]; for (int i = 0; i <= num; i++) { for (int j = 0; j <= i; j++) { if(j == i || j == 0){ dp[i % 2][j] = 1; }else{ dp[i % 2][j] = dp[(i - 1) % 2][j - 1] + dp[(i - 1) % 2][j]; } } } return dp[num % 2]; } }
public int[] getRow (int num) { int[][] dp = new int[num+1][]; dp[0] = new int[]{1}; if (num == 0) return dp[0]; for (int i = 1; i <= num; i++) { dp[i] = new int[i+1]; for (int j = 0; j < i+1; j++) { if (j == 0) dp[i][j] = dp[i-1][j]; else if (j == i) dp[i][j] = dp[i-1][j-1]; else dp[i][j] = dp[i-1][j] + dp[i-1][j-1]; } } return dp[num]; }