第一题:剑指 Offer 12. 矩阵中的路径
思路
代码
class Solution {
public boolean exist(char[][] board, String word) {
if(board == null || board.length == 0) return false;
char[] str = word.toCharArray();
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if(DFS(board,str,i,j,0)) return true;
}
}
return false;
}
boolean DFS(char [][] board,char []str,int i,int j,int k){
if(i<0 || i >= board.length || j<0 || j >= board[0].length || board[i][j] != str[k])
return false;
if( k == str.length-1) return true;
board[i][j] = '\0';
boolean res = DFS(board,str,i-1,j,k+1) || DFS(board,str,i+1,j,k+1) ||
DFS(board,str,i,j+1,k+1) || DFS(board,str,i,j-1,k+1);
board[i][j] = str[k];
return res;
}
}
第二题:剑指 Offer 13. 机器人的运动范围
问题描述
思路
代码
class Solution {
boolean [][] visited;
int m,n;
public int movingCount(int m, int n, int k) {
this.m = m;
this.n = n;
visited = new boolean[m][n];
return DFS(0,0,k);
}
private int DFS(int i, int j, int k) {
if (i >= m || j >= n || visited[i][j] == true|| sum(i, j) > k) return 0;
visited[i][j] = true;
return 1 + DFS(i + 1, j, k) + DFS(i, j + 1, k);
}
private int sum(int i,int j){
int sum =0;
while(i != 0){
sum += i % 10;
i /= 10;
}
while(j != 0){
sum += j % 10;
j /= 10;
}
return sum;
}
}