zoukankan      html  css  js  c++  java
  • LeetCode 62

    /*
     * @lc app=leetcode id=62 lang=cpp
     *
     * [62] Unique Paths
     *
     * https://leetcode.com/problems/unique-paths/description/
     *
     * algorithms
     * Medium (46.62%)
     * Total Accepted:    268.7K
     * Total Submissions: 574.4K
     * Testcase Example:  '3
    2'
     *
     * A robot is located at the top-left corner of a m x n grid (marked 'Start' in
     * the diagram below).
     * 
     * The robot can only move either down or right at any point in time. The robot
     * is trying to reach the bottom-right corner of the grid (marked 'Finish' in
     * the diagram below).
     * 
     * How many possible unique paths are there?
     * 
     * 
     * Above is a 7 x 3 grid. How many possible unique paths are there?
     * 
     * Note: m and n will be at most 100.
     * 
     * Example 1:
     * 
     * 
     * Input: m = 3, n = 2
     * Output: 3
     * Explanation:
     * From the top-left corner, there are a total of 3 ways to reach the
     * bottom-right corner:
     * 1. Right -> Right -> Down
     * 2. Right -> Down -> Right
     * 3. Down -> Right -> Right
     * 
     * 
     * Example 2:
     * 
     * 
     * Input: m = 7, n = 3
     * Output: 28
     * 
     */
    class Solution {
    public:
        int uniquePaths(int m, int n) {
           if (m == 1 && n ==1)
                return 1; 
            int right = 0,left = 0;
            if(m > 1) right = uniquePaths(m-1,n);
            if(n > 1) left = uniquePaths(m,n-1);
            return right + left;
        }
    };
    
    class Solution {
    public:
        int uniquePaths(int m, int n) {
            int ways[m][n];
            for(int i = 0;i < m;++i){
                for(int j = 0;j < n; ++j){
                    if(i == 0 || j == 0) ways[i][j] = 1;
                    else
                    {
                        ways[i][j] = ways[i-1][j] + ways[i][j-1];
                    }                
                }
            }
            return ways[m-1][n-1];
        }
    };
    
    class Solution {
    public:
        int uniquePaths(int m, int n) {
            int ways[n]={0};
            ways[0] = 1;
            for(int i = 0;i < m;++i){
                for(int j = 1;j < n; ++j){
                    ways[j] += ways[j-1];             
                }
            }
            return ways[n-1];
        }
    };
    

    首先是朴素的递归思想;
    其次是根据动态规划的状态转移方程进行优化;
    再对存储进行优化;

  • 相关阅读:
    负载均衡——LVS DR模式
    Java之BigDecimal详解
    Spring AOP代理对象创建流程
    spring aop切面不生效
    aspectj-autoproxy Controller未生效解决方案
    jvm参数分类
    dubbo优雅停机
    Dubbo 协议注意项
    dubbo provider
    查找java_home的安装路径
  • 原文地址:https://www.cnblogs.com/walnuttree/p/10607151.html
Copyright © 2011-2022 走看看