zoukankan      html  css  js  c++  java
  • 【嘎】数组-杨辉三角

    题目: 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

    在杨辉三角中,每个数是它左上方和右上方的数的和。

    示例:

    输入: 5
    输出:
    [
    [1],
    [1,1],
    [1,2,1],
    [1,3,3,1],
    [1,4,6,4,1]
    ]

     1 class Solution {
     2     public List<List<Integer>> generate(int numRows) {
     3         List<List<Integer>> res = new ArrayList<List<Integer>>(numRows);
     4         // i 是横向list的长度
     5         for (int i = 1; i <= numRows; i++) {
     6             List<Integer> lis = new ArrayList<Integer>(i);
     7             lis.add(0, 1);
     8             if (i < 2) {
     9                 // 这边一开始忘记了
    10                 res.add(lis);
    11                 continue;
    12             }
    13             for (int j = 1; j < i - 1; j++) {
    14                 List<Integer> prelis = res.get(i - 2);
    15                 lis.add(j, prelis.get(j-1) + prelis.get(j));
    16             }
    17             lis.add(i - 1, 1);
    18             res.add(lis);
    19         }
    20         return res;
    21     }
    22 }

    看了评论才知道我这种解法是【动态规划】迭代

    动态规划(Dynamic Programming,所以我们简称动态规划为DP),动态规划是一种编程原理,可以通过将非常复杂的问题划分为更小的子问题来解决。这个原则与递归很类似,但是与递归有一个关键点的不同,就是每个不同的子问题只能被解决一次

    Arrays.asList的作用是将数组转化为list

    给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

    题目二: 在杨辉三角中,每个数是它左上方和右上方的数的和。

    示例:

    输入: 3
    输出: [1,3,3,1]
    进阶:

    你可以优化你的算法到 O(k) 空间复杂度吗?

    这一题没想出来,别人的写法:(啊脑阔疼,先休息一下)

    fill()方法使用参考

    声明举例:

    public static void fill(int[] a, form, to, int var) 

    参数:

    a--数组

    form--替换开始位置(包括)

    to--替换结束位置(不包括)

    var--要替换的值

     1 public List<Integer> getRow(int rowIndex) {
     2         List<Integer> ls = new ArrayList<>();
     3         ls.add(1);
     4         for (int i = 1;i <= rowIndex;i++){
     5             ls.add(1);
     6             for (int j = i-1;j > 0;j--)
     7                 ls.set(j, ls.get(j)+ls.get(j-1));
     8         }
     9         return ls;
    10     }
     1   public List<Integer> getRow(int rowIndex) {
     2         Integer[] dp = new Integer[rowIndex + 1];
     3         Arrays.fill(dp,1);
     4         for(int i = 2;i < dp.length;i++){
     5             for(int j = i - 1;j > 0;j--)
     6                 dp[j] = dp[j] + dp[j - 1];
     7         }
     8         List<Integer> res = Arrays.asList(dp);
     9         return res;
    10     }
    越努力越幸运~ 加油ヾ(◍°∇°◍)ノ゙
  • 相关阅读:
    javascript 下拉列表 自动取值 无需value
    gopkg:一种方便的go pakcage管理方式
    编译GDAL使用最新的HDF库配置文件
    leetcode:程序员面试技巧
    【Unity Shader实战】卡通风格的Shader(一)
    GDAL1.11版本对SHP文件索引加速测试
    【Unity Shaders】Shader学习资源和Surface Shader概述
    关于rowid的函数
    java基本类型的大小
    【转载】oracle之rowid详解
  • 原文地址:https://www.cnblogs.com/utomboy/p/12455490.html
Copyright © 2011-2022 走看看