题目:
示例如下:
思路:
对于这种条件判断的题目,每一个节点的判断都与上一个节点类似,因此使用深度遍历的方式来循环判断每一个节点,根据题意进行遍历判断,定义好边界条件即可。
代码:
class Solution {
boolean result = false;
public boolean checkValidGrid(int[][] grid) {
int startLeft = 0,startRight = 0;
if(grid[startLeft][startRight]!=0) return false;
int index = 1;
dfs(grid,startLeft,startRight,index);
return result;
}
public void dfs(int[][] grid,int startLeft,int startRight,int index){
if(index==grid.length*grid.length){
result = true;
return;
}
if(startLeft-2>=0 && startRight-1>=0
&& grid[startLeft-2][startRight-1]==index){
dfs(grid,startLeft-2,startRight-1,index+1);
}
if(startLeft-2>=0 && startRight+1<grid.length
&& grid[startLeft-2][startRight+1]==index){
dfs(grid,startLeft-2,startRight+1,index+1);
}
if(startLeft-1>=0 && startRight-2>=0
&& grid[startLeft-1][startRight-2]==index){
dfs(grid,startLeft-1,startRight-2,index+1);
}
if(startLeft-1>=0 && startRight+2<grid.length
&& grid[startLeft-1][startRight+2]==index){
dfs(grid,startLeft-1,startRight+2,index+1);
}
if(startLeft+2<grid.length && startRight-1>=0
&& grid[startLeft+2][startRight-1]==index){
dfs(grid,startLeft+2,startRight-1,index+1);
}
if(startLeft+2<grid.length && startRight+1<grid.length
&& grid[startLeft+2][startRight+1]==index){
dfs(grid,startLeft+2,startRight+1,index+1);
}
if(startLeft+1<grid.length && startRight-2>=0
&& grid[startLeft+1][startRight-2]==index){
dfs(grid,startLeft+1,startRight-2,index+1);
}
if(startLeft+1<grid.length && startRight+2<grid.length
&& grid[startLeft+1][startRight+2]==index){
dfs(grid,startLeft+1,startRight+2,index+1);
}
}
}