zoukankan      html  css  js  c++  java
  • 【Leetcode】不同路径

    题目:

    思路一:

    动态规划。创建一个mxn的二维数组,数组内存储到达每个点的路径数量N。动态规划推导式,N(i,j) = N(i-1, j) + N(i, j-1)。

    思路二:

    从左上角出发,终点是右下角,每次只能向右走(R)或者向下走(D)。总共需要向右移动 n-1 次,向下移动 m-1 次,一共要移动 m+n-2 次。求从起点到终点的所有路径,问题可以转换为,有 m+n-2 个抽屉,有 n-1 把钥匙,每个抽屉最多只能放1把钥匙,有多少种放置方案。排列组合问题。

    编程计算排列组合,注意一点,分子和分母的阶乘运算导致int类型的变量溢出

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            double result = 1.0;
            int remain = 1;
            
            int num = min(m-1, n-1);
            
            for(int i = 0; i < num; ++i) {
                if( ((m+n-2-i)%(i+1)) == 0 )    // 单项实现整除
                    result *= ((m+n-2-i)/(i+1));
                else {
                    if( result/(i+1) > int(result/(i+1)) )   // 前几项的积能够整除(i+1)
                        result /= (i+1);
                    else                       // 前几项的积无法整除(i+1)
                        remain *= (i+1);
                    
                    result *= (m+n-2-i);
                }
            }
            
            result /= remain;
            return result;
        }
    };
  • 相关阅读:
    反射
    注解
    file
    exception(异常)
    MySQL问题
    maven 中 遇到的问题
    Java读取文本数字
    人民币-欧元预测(ARIMA算法)代码
    云平台项目--学习经验--jsrender前端渲染模板
    云平台项目--学习经验--BootstrapValidate表单验证插件
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/11737821.html
Copyright © 2011-2022 走看看