zoukankan      html  css  js  c++  java
  • leetcode62

    使用排列组合计算公式来计算,注意使用long long型数据保证计算不会溢出。

     1 class Solution {
     2 public:
     3     long long FA(long long a) //定义阶乘函数FA
     4     {
     5         long long x = 1;//定义变量b
     6         for (int i = 1; i <= a; i++)//计算阶乘 
     7             x *= i;
     8         return x;//返回值得到b=a! 
     9     }
    10 
    11     long long FA(long long a, long long b) //定义阶乘函数FA
    12     {
    13         //long long b = 1;//定义变量b    
    14         long long x = 1;
    15         for (int i = b; i <= a; i++)//计算阶乘 
    16             x *= i;
    17         return x;//返回值得到b=a! 
    18     }
    19 
    20     int uniquePaths(int m, int n) {
    21         long long a = FA(m - 1 + n - 1, max(m, n));
    22         long long b = FA(min(m, n) - 1);
    23         return (int)(a / b);
    24     }
    25 };

    补充一个使用dp的方案,python 实现:

     1 class Solution:
     2     def uniquePaths(self, m: 'int', n: 'int') -> 'int':
     3         dp =[[0 for col in range(n)] for row in range(m)]        
     4         for i in range(m):
     5             dp[i][0] =  1
     6 
     7         for j in range(n):
     8             dp[0][j] = 1
     9         print(dp)
    10         for i in range(1,m):
    11             for j in range(1,n):
    12                 dp[i][j] = dp[i-1][j] + dp[i][j-1]
    13         return dp[m-1][n-1]

    初始化index==0的行和index==0的列,起点为0,其他都是1(黑色)。

    然后从(1,1)开始计算,可以一行一行的计算,也可以一列一列的计算,也可以按对角线计算,总之一步一步的推进,一直计算到(i,j)元素(红色),即为所求。

    注意,dp[i][j]==dp[m-1][n-1]。

  • 相关阅读:
    JS 做的鼠标放大镜(初级)
    用JS做关灯游戏(初级)
    JS 做时钟
    Magic Powder
    (记忆化搜索)Jury Compromise (poj 1015)
    (求凹包) Bicycle Race (CF 659D) 简单题
    Phalanx (hdu 2859)
    第十四个目标 (fzu)
    (树形dp)鸡毛信问题 (fzu 1227)
    (最大m子段和) Max Sum Plus Plus (Hdu 1024)
  • 原文地址:https://www.cnblogs.com/asenyang/p/9739666.html
Copyright © 2011-2022 走看看