zoukankan      html  css  js  c++  java
  • 【LeetCode】Unique Paths

    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 3 x 7 grid. How many possible unique paths are there?

    Note: m and n will be at most 100.

    code: // 一个简单的动态规划问题。

     

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            // Note: The Solution object is instantiated only once and is reused by each test case.
            if(m == 0 || n == 0)
                return 0;
            int **dp = new int*[m];
            for(int i = 0; i < m; i++)
            {
                dp[i] = new int[n];
            }
            dp[0][0] = 1;
            for(int i = 1; i < m; i++)
                dp[i][0] = 1;
            for(int j = 1; j < n; j++)
                dp[0][j] = 1;
            for(int i = 1; i < m; i++)
            {
                for(int j = 1; j < n; j++)
                {
                    dp[i][j] = dp[i][j-1] + dp[i-1][j];
                }
            }
            int res = dp[m-1][n-1];
            for(int i = 0; i < m; i++)
            {
                delete [] dp[i];
            }
            delete [] dp;
            return res;
        }
    };

    来一个java版本的,不用显式回收从堆中申请的内存,由java自己的垃圾回收机制来回收,只需讲引用变量和引用对象之间切断,让该内存成为垃圾。

    public class Solution {
        public int uniquePaths(int m, int n) {
            // Note: The Solution object is instantiated only once and is reused by each test case.
            if(m == 0 || n == 0)
                return 0;
            int[][] dp = new int[m][n];
            dp[0][0] = 1;
            for(int i = 1; i < m; i++)
                dp[i][0] = 1;
            for(int j = 1; j < n; j++)
                dp[0][j] = 1;
            for(int i = 1; i < m; i++)
            {
                for(int j = 1; j < n; j++)
                {
                    dp[i][j] = dp[i][j-1] + dp[i-1][j];
                }
            }
            int res = dp[m-1][n-1];
            for(int i = 0; i < m; i++)
            {
                 dp[i] = null;
            }
            dp = null;
            return res;
        }
        
    }


  • 相关阅读:
    Spring@Profile注解
    day 32 子进程的开启 及其用法
    day 31 udp 协议SOCK_DGRAM
    day 30 客户端获取cmd 命令的步骤
    day 29 socket 理论
    day 29 socket 初级版
    有关 组合 继承
    day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
    新式类和经典类的区别
    day 28 hasattr getattr serattr delattr 和带__内置__ 类的内置方法
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3367634.html
Copyright © 2011-2022 走看看