给定2d矩阵,找到从左上角到右下角的路径。假设至少存在一条路径,而您只需要找到一条有效路径。您可以在任何位置上,右,下,左移动。
例如,给定
[1,0,0,0,0]
[1、0、1、1、1]
[1、1、1、0、1]
[1、0、0、0、1]
[1、0、0、0、1]
有效路径是
[1,0,0,0,0]
[1、0、1、1、1]
[1、1、1、0、1]
[0,0,0,0,1]
[0,0,0,0,1]
Java解决方案
publicint[][] findPath(int[][] matrix){
intm = matrix.length;
int[][] result = newint[m][m];
ArrayList temp = newArrayList();
ArrayList list = newArrayList();
dfs(matrix, 0, 0, temp, list);
for(inti=0; i
result[list.get(i)[0]][list.get(i)[1]]=1;
//System.out.println(Arrays.toString(list.get(i)));
}
result[0][0]=1;
returnresult;}
publicvoiddfs(int[][] matrix, int i, int j,
ArrayList temp, ArrayList list){
intm=matrix.length;
if(i==m-1 && j==m-1){
list.clear();
list.addAll(temp);
return;
}
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
for(intk=0; k<4; k++){
intx = i+dx[k];
inty = j+dy[k];
if(x>=0&&y>=0&&x<=m-1&&y<=m-1 && matrix[x][y]==1){
temp.add(newint[]{x,y});
intprev = matrix[x][y];
matrix[x][y]=0;
dfs(matrix, x, y, temp, list);
matrix[x][y]=prev;
temp.remove(temp.size()-1);
}
} }
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。