Leetcode 62. Unique Paths

最一開始直接用dfs recursion暴力遍歷出全部的route,可是超時不給過TLE了html

而後去網上搜索解法發現能夠結合緩存,保留一個f[m][n]數組把遍歷到的點的path數保存到數組裏,下次再走到這一點就不須要再遞歸調用dfs來找值啦。參考了此reference中dfs+緩存的作法:java

https://soulmachine.gitbooks.io/algorithm-essentials/content/java/dfs/unique-paths.htmlgit

最終AC的code以下:數組

//int cnt = 0;//不須要計這個數,直接用返回值和加法來記錄步數便可
    private int[][] f; //cache of number of paths to (x,y) point 
    public int uniquePaths(int m, int n) {
        f = new int[m][n];
        f[m-1][n-1] = 1;
        return dfs(0,0,m,n);
    }
    //此dfs返回的是從(row,col)到goal即(m-1,n-1)有多少條path能夠走
    public int dfs(int row, int col, int m, int n) {
        if(row==m-1&&col==n-1) {
            //cnt ++;
            return 1;
        }
        if(row>m-1||col>n-1) {
            return 0;
        }
        if(f[row][col]>0) {//若是path上的點以前已被走過(緩存過)則不須要再recursively調用dfs()函數,直接返回緩存的值
            return f[row][col];
        }
        else {
            int paths = dfs(row+1,col,m,n)+dfs(row,col+1,m,n);
            if(row+1<m&&col+1<n) f[row][col] = paths;
            return paths;
        }
        
    }
相關文章
相關標籤/搜索