力扣-10.22-1091

it2026-02-26  9

class Solution { public int shortestPathBinaryMatrix(int[][] grid) { if(grid==null || grid.length==0 || grid[0].length==0) { return -1; } // m对应行数,n对应列数 int m=grid.length,n=grid[0].length; if(grid[0][0]==1 || grid[m-1][n-1]==1) { return -1; } int[][] directions= {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; LinkedList<int[]> queue=new LinkedList<int[]>(); queue.add(new int[] {0,0}); int len=queue.size(); int c = 0; int path=1; while(!queue.isEmpty()) { int[] data=queue.poll(); // x,y代表当前的坐标 int x=data[0]; int y=data[1]; if(x==m-1 && y==n-1) { return path; } for(int[] d : directions) { int xt=x+d[0]; int yt=y+d[1]; if(xt>=0 && yt>=0 && xt<m && yt<n && grid[xt][yt]==0) { queue.add(new int[] {xt,yt}); grid[xt][yt]=1; } } // c是记录队列中已经遍历过多少元素 c++; if(c==len) { c=0; path++; len=queue.size(); } } return -1; } }
最新回复(0)