• Leecode刷题之旅-C语言/python-118杨辉三角


    /*
     * @lc app=leetcode.cn id=118 lang=c
     *
     * [118] 杨辉三角
     *
     * https://leetcode-cn.com/problems/pascals-triangle/description/
     *
     * algorithms
     * Easy (60.22%)
     * Total Accepted:    17.6K
     * Total Submissions: 29.2K
     * Testcase Example:  '5'
     *
     * 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
     * 
     * 
     * 
     * 在杨辉三角中,每个数是它左上方和右上方的数的和。
     * 
     * 示例:
     * 
     * 输入: 5
     * 输出:
     * [
     * ⁠    [1],
     * ⁠   [1,1],                                    0
     * ⁠  [1,2,1],                                   
     * ⁠ [1,3,3,1],
     * ⁠[1,4,6,4,1]
     * ]
     * 
     */
    /**
     * Return an array of arrays.
     * The sizes of the arrays are returned as *columnSizes array.
     * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
     */
    int** generate(int numRows, int** columnSizes) {
        int i,j;
        if(numRows == 0) return 0;
        int** Array = (int **)malloc(numRows * sizeof(int *));
        *columnSizes = (int *)malloc(numRows * sizeof(int));
        for(i = 0; i < numRows; i++){        
            (*columnSizes)[i] = i + 1;       
             Array[i] = (int *)malloc((i + 1) * sizeof(int));        
            for(j = 0; j < i + 1; j++){            
              if((j == 0) || (j == i))                
              Array[i][j] = 1;           
               else                
               Array[i][j] = Array[i - 1][j - 1] + Array[i - 1][j];       
            }    
         }   
     return Array;
    }

    算法核心是很好理解的。如果是首位或者末位,就等于一。否则的话,等于上一轮中两数之和。 如果当前是a[i][j] 那么就等于 a[i-1][j]+a[i-1][j+1]

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    python:

    #
    # @lc app=leetcode.cn id=118 lang=python3
    #
    # [118] 杨辉三角
    #
    # https://leetcode-cn.com/problems/pascals-triangle/description/
    #
    # algorithms
    # Easy (60.22%)
    # Total Accepted:    17.6K
    # Total Submissions: 29.2K
    # Testcase Example:  '5'
    #
    # 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
    # 
    # 
    # 
    # 在杨辉三角中,每个数是它左上方和右上方的数的和。
    # 
    # 示例:
    # 
    # 输入: 5
    # 输出:
    # [
    # ⁠    [1],
    # ⁠   [1,1],
    # ⁠  [1,2,1],
    # ⁠ [1,3,3,1],
    # ⁠[1,4,6,4,1]
    # ]
    # 
    #       
    class Solution:
        def generate(self, numRows):
            result = []
            if numRows == 0: return []
            for i in range(numRows):
                temp = []
                for j in range(i + 1):
                    if j == 0: 
                        temp.append(1)
                    elif j == i:
                        temp.append(1)
                    else:
                        add = result[i - 1][j - 1] + result[i - 1][j]
                        temp.append(add)
                result.append(temp)
            return result
  • 相关阅读:
    C#中泛型类,泛型方法,泛型约束实际应用
    Sql语法高级应用之七:如何在存储过程中使用事务
    再探motan
    终于好像懂motan了!!!
    java 反射详解
    设计模式之一工厂方法模式(Factory Method)
    记一次CPU占用率和load高的排查
    浅谈反射性能
    短网址服务(TinyURL)生成算法
    记一次阿里云中间件面试
  • 原文地址:https://www.cnblogs.com/lixiaoyao123/p/10529491.html
Copyright © 2020-2023  润新知