第一题
题目一:岛屿数量(采用深度优先算法)
public class Solution {
public int numIslands(char[][] grid) {
// 1 判断
if (grid == null || grid.length == 0) {
return 0;
}
int rn = grid.length;
int cn = grid[0].length;
// 2.1 岛屿数量初始化为0
int numberIsland = 0;
// 2 两次for循环遍历图
for (int i = 0; i < rn; i++) {
for (int j = 0; j < cn; j++) {
// 2.2 if是1 触发dfs 岛屿+1
if (grid[i][j] == '1') {
numberIsland++;
dfs(grid,i,j);
}
}
}
return numberIsland;
}
// 3 dfs方法
void dfs(char[][] grid,int i,int j){
int rn = grid.length;
int cn = grid[0].length;
// 3.1 判断
if(i<0||j<0||i>=rn||j>=cn||grid[i][j] == '0'){
return;
}
// 3.2 置为0
grid[i][j]='0';
// 3.3 搜索上下左右
dfs(grid,i-1,j);
dfs(grid,i+1,j);
dfs(grid,i,j+1);
dfs(grid,i,j-1);
}
}
第二题
题目二:字符串解码 (栈)
public class Solution {
public String decodeString(String s) {
// 0 新建一个res 装 结果字符串
StringBuilder res = new StringBuilder();
int multi = 0;
LinkedList<Integer> stack_multi = new LinkedList<>();
LinkedList<String> stack_str = new LinkedList<>();
//1 遍历字符串
for (char ch:s.toCharArray()) {
// 1.1 如果是左括号
if(ch == '['){
stack_multi.add(multi);//3
stack_str.add(res.toString());//""
res = new StringBuilder();
multi = 0;
} else if (ch==']') {
int cur_multi = stack_multi.removeLast();
StringBuilder temp = new StringBuilder();
for (int i = 0; i < cur_multi; i++) {
temp.append(res);//cc
}
res = new StringBuilder(stack_str.removeLast()+temp);// a+cc
} else if (ch>='0'&&ch<='9') {
multi=multi*10+Integer.parseInt(ch+"");//将ch转成整数
}else {
res.append(ch);
}
}
return res.toString();
}
}