[LeetCode]62.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.

【思路】

设s[i][j] 为从起点到(i,j)位置处的路径数。

通过分析得到:第一行,第一列都为1

到其他位置处(i,j):到达位置(i,j)只能从上面或者左面过来,因此决定到位置(i,j)的路径数由到达上面位置(i-1,j)的路径数和到达左面位置(i,j-1)的路径所决定的。

状态转移方程:

s[i][j] = s[i-1][j] + s[i][j-1]

时间复杂度:O(n^2)  空间复杂度:O(n^2)

【代码】

    /*------------------------------------
    *   日期:2015-02-03
    *   作者:SJF0115
    *   题目: 62.Unique Paths
    *   网址:https://oj.leetcode.com/problems/unique-paths/
    *   结果:AC
    *   来源:LeetCode
    *   博客:
    ---------------------------------------*/
    #include <iostream>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    using namespace std;

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            int s[m][n];
            for(int i = 0;i < m;++i){
                for(int j = 0;j < n;++j){
                    if(i == 0|| j == 0){
                        s[i][j] = 1;
                    }//if
                    else{
                        s[i][j] = s[i-1][j] + s[i][j-1];
                    }//esle
                }//for
            }//for
            return s[m-1][n-1];
        }
    };

    int main(){
        Solution s;
        int m = 3;
        int n = 4;
        int result = s.uniquePaths(m,n);
        // 输出
        cout<<result<<endl;
        return 0;
    }

【思路二】

使用空间轮转的思路,节省空间。

状态转移方程:

s[j] = s[j] + s[j-1]

时间复杂度:O(n^2)  空间复杂度:O(n)

【代码二】

    /*------------------------------------
    *   日期:2015-02-03
    *   作者:SJF0115
    *   题目: 62.Unique Paths
    *   网址:https://oj.leetcode.com/problems/unique-paths/
    *   结果:AC
    *   来源:LeetCode
    *   博客:
    ---------------------------------------*/
    class Solution {
    public:
        int uniquePaths(int m, int n) {
            int s[n];
            // 第一行全为1
            for(int i = 0;i < n;++i){
                s[i] = 1;
            }//for
            // 从第二行开始
            for(int i = 1;i < m;++i){
                // 第i行第j个格
                for(int j = 1;j < n;++j){
                    s[j] = s[j] + s[j-1];
                }//for
            }//for
            return s[n-1];
        }
    };

时间: 2024-08-25 02:59:46

[LeetCode]62.Unique Paths的相关文章

[LeetCode]--63. Unique Paths II

Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one obstacle in the middl

[LeetCode]95.Unique Binary Search Trees II

[题目] Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example, Given n = 3, your program should return all 5 unique BST's shown below. 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 confused what "

Unique Paths II

Dynamic Programming Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one o

Unique Paths

Dynamic Programming 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 (

[LeetCode]96.Unique Binary Search Trees

[题目] Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 [分析] 如果把上例的顺序改一下,就可以看出规律了. 比如,以 1 为根的树的个数

[LeetCode] Binary Tree Paths - 二叉树基础系列题目

目录:1.Binary Tree Paths - 求二叉树路径 2.Same Tree - 判断二叉树相等 3.Symmetric Tree - 判断二叉树对称镜像 Binary Tree Paths 题目概述:Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 / \ 2 3 \ 5 All root-to-leaf paths are: ["1-

leetcode难度及面试频率

转载自:LeetCode Question Difficulty Distribution               1 Two Sum 2 5 array sort         set Two Pointers 2 Add Two Numbers 3 4 linked list Two Pointers           Math 3 Longest Substring Without Repeating Characters 3 2 string Two Pointers      

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

careercup-递归和动态规划 9.2

9.2 设想有个机器人坐在X*Y网格的左上角,只能向右.向下移动.机器人从(0,0)到(X,Y)有多少种走法? 进阶: 假设有些点为"禁区",机器人不能踏足.设计一种算法,找到一条路径,让机器人从左上角移动到右下角. 类似leetcode:Unique Paths和Unique Paths II 解法: 我们需要数一数机器人向右X步.向下Y步,总共可以走多少种路径.这条路径总共有X+Y步. 为了走出一条路径,我们实质上要从X+Y步为向右移动.因此,可能路径的总数就是从X+Y项中选出X项