zoukankan      html  css  js  c++  java
  • [Leetcode]Unique Paths

    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.

    一种使用数学方法,简单排列组合。注意可能超过int,使用double,最后强制类型转换。

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            if(m <=0 || n <= 0) return 0;
            long long res = 1;
            for(int i = n; i < m+n-1 ; i++){
                res = res * i / (i- n + 1);
            }
            return (int)res;
        }
    };
    

      

    另外一种dp。

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            vector<vector<int> > vec(m,vector<int>(n,1));
            for (int i=1;i<m;++i) {
                for (int j = 1;j<n;++j) {
                    vec[i][j] = vec[i-1][j] + vec[i][j-1];
                }
            }
            
            return vec[m-1][n-1];
        }
    };
    

     

    Unique Paths II

    Total Accepted: 48928 Total Submissions: 173558 Difficulty: Medium

    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 middle of a 3x3 grid as illustrated below.

    [
      [0,0,0],
      [0,1,0],
      [0,0,0]
    ]
    

    The total number of unique paths is 2.

    Note: m and n will be at most 100.

    dp做了一些改变。

    class Solution {
    public:
        int uniquePathsWithObstacles(vector<vector<int>>& g) {
            int m = g.size();
            int n =g[0].size();
            vector<vector<int> > path(m,vector<int>(n));
            for(int i = 0; i < n; ++i) {
                if(g[0][i] == 1) {
                    for(;i<n;++i) {
                        path[0][i] = 0;
                    }
                    break;
                }
                path[0][i] = 1;
            }
            for (int j = 0;j <m;++j) {
                if(g[j][0] == 1) {
                    for(;j<m;++j) {
                        path[j][0] = 0;
                    }
                    break;
                }
                path[j][0] = 1;
            }
            for(int i =1;i<m;++i) {
                for(int j =1;j<n;++j) {
                    if(g[i][j] == 1) 
                        path[i][j] = 0;
                    else {
                        path[i][j] = path[i-1][j] + path[i][j-1];
                    }
                }
            }
            return path[m-1][n-1];
            
        }
    };
    

      话说一遍ac的感觉真好啊~

  • 相关阅读:
    MySQL性能优化(二):优化数据库的设计
    MySQL性能优化(一):优化方式
    PTA 07-图4 哈利·波特的考试 (25分)
    PTA 06-图3 六度空间 (30分)
    PTA 06-图2 Saving James Bond
    PTA 06-图1 列出连通集 (25分)
    PTA 05-树9 Huffman Codes (30分)
    PTA 05-树8 File Transfer (25分)
    PTA 05-树7 堆中的路径 (25分)
    PTA 04-树6 Complete Binary Search Tree (30分)
  • 原文地址:https://www.cnblogs.com/shenbingyu/p/4909846.html
Copyright © 2011-2022 走看看