classSolution{public:intcountPaths(vector<vector<int>>&grid){constintm=grid.size();constintn=grid[0].size();intans=0;vector<vector<int>>mem(m,vector<int>(n,-1));for(inti=0;i<m;++i)for(intj=0;j<n;++j){ans+=countPaths(grid,i,j,mem);ans%=kMod;}returnans;}private:staticconstexprintkMod=1'000'000'007;staticconstexprintkDirs[4][2]={{0,1},{1,0},{0,-1},{-1,0}};// Returns the number of increasing paths starting from (i, j).intcountPaths(constvector<vector<int>>&grid,inti,intj,vector<vector<int>>&mem){if(mem[i][j]!=-1)returnmem[i][j];mem[i][j]=1;// The current cell contributes 1 length.for(constauto&[dx,dy]:kDirs){constintx=i+dx;constinty=j+dy;if(x<0||x==grid.size()||y<0||y==grid[0].size())continue;if(grid[x][y]<=grid[i][j])continue;mem[i][j]+=countPaths(grid,x,y,mem);mem[i][j]%=kMod;}returnmem[i][j];}};
classSolution{publicintcountPaths(int[][]grid){finalintm=grid.length;finalintn=grid[0].length;intans=0;Integer[][]mem=newInteger[m][n];for(inti=0;i<m;++i)for(intj=0;j<n;++j){ans+=countPaths(grid,i,j,mem);ans%=MOD;}returnans;}privatestaticfinalintMOD=1_000_000_007;privatestaticfinalint[][]DIRS={{0,1},{1,0},{0,-1},{-1,0}};// Returns the number of increasing paths starting from (i, j).privateintcountPaths(int[][]grid,inti,intj,Integer[][]mem){if(mem[i][j]!=null)returnmem[i][j];mem[i][j]=1;// The current cell contributes 1 length.for(int[]dir:DIRS){intx=i+dir[0];inty=j+dir[1];if(x<0||x==grid.length||y<0||y==grid[0].length)continue;if(grid[x][y]<=grid[i][j])continue;mem[i][j]+=countPaths(grid,x,y,mem);mem[i][j]%=MOD;}returnmem[i][j];}}
1 2 3 4 5 6 7 8 910111213141516171819202122232425
classSolution:defcountPaths(self,grid:list[list[int]])->int:MOD=1_000_000_007DIRS=((0,1),(1,0),(0,-1),(-1,0))m=len(grid)n=len(grid[0])@functools.lru_cache(None)defdp(i:int,j:int)->int:"""Returns the number of increasing paths starting from (i, j)."""ans=1# The current cell contributes 1 length.fordx,dyinDIRS:x=i+dxy=j+dyifx<0orx==mory<0ory==n:continueifgrid[x][y]<=grid[i][j]:continueans+=dp(x,y)ans%=MODreturnansreturnsum(dp(i,j)foriinrange(m)forjinrange(n))%MOD
Thanks for stopping by! If you find this site helpful, consider buying me some protein powder to keep me fueled! π