最一開始直接用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; } }