62. 不同路径

2021-07-27  本文已影响0人  名字是乱打的

1.递归(超时)

第一眼想到递归回溯,因为只有两种路径,向下或者向右,但是大网格的时候超出时间限制,因为其包含了大量的压栈出栈重复计算,代码

class Solution {
        int res = 0;

        public int uniquePaths(int m, int n) {
            //x,y 0 0 xmac m ymax x
            getCount(0, 0, m, n);
            return res;
        }

        private void getCount(int x, int y, int m, int n) {
            if (x >= m || y >= n) {
                return;
            }

            if (x == m - 1 || y == n - 1) {
                res++;
                return;
            }

            //向右
            if (x < m - 1) {
                x++;
                getCount(x, y, m, n);
                x--;
            }


            //向下
            if (y < n - 1) {
                y++;
                getCount(x, y, m, n);
                y--;
            }

        }
    }

2.动态规划

如图所示一个7*3的网格

思路:

class Solution {
        int res = 0;

        public int uniquePaths(int m, int n) {
            int[][] data=new int[m][n];
            for (int i = 0; i < m; ++i) {
                data[i][0]=1;
            }

            for (int i = 0; i < n; ++i) {
                data[0][i]=1;
            }
            for (int i = 1; i < m; i++) {
                for (int j = 1; j < n; j++) {
                    data[i][j]=data[i-1][j]+data[i][j-1];
                }
            }

            return data[m-1][n-1];
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读