岛屿最大面积_组合总和
岛屿的最大面积
class Solution { int[][] next = {{1,0},{-1,0},{0,-1},{0,1}}; public int DSF(int[][] grid,int row,int col,int sr,int sc){ //标记 int count = 1; grid[sr][sc] = -1; for(int i = 0;i<next.length;i++){ int x = sr + next[i][0]; int y = sc + next[i][1]; if(x<0||x>=row||y<0||y>=col){ //越界 continue; } if(grid[x][y]==1){ //注意重点!!! count开始时要赋值为 1 //因为进了这个函数就说明是陆地! count += DSF(grid,row,col,x,y); } } return count; } public int maxAreaOfIsland(int[][] grid) { int maxArea = 0; int row = grid.length; int col = grid[0].length; for(int i = 0;i<row;i++){ for(int j = 0;j<col;j++){ if(grid[i][j]==1){ maxArea = Math.max(maxArea,DSF(grid,row,col,i,j)); } } } return maxArea; } }
电话号码的字母组合
class Solution { public static void DFS(HashMap <Character,String> map, List<String> result, char[] d, StringBuilder str,int pos){ if(pos==d.length){//递归出口! result.add(str.toString()); return; } //拿到 value字符串! //这里不能套循环遍历,因为这里不能重复! String tmp = map.get(d[pos]); for(int j = 0;j<tmp.length();j++){ //遍历该字符串! //添加该字符! str.append(tmp.charAt(j)); //进入下一层 深度! DFS(map, result, d, str, pos+1); //回退! //str.delete(str.length()-1,str.length()); str.deleteCharAt(str.length()-1); } } public static List<String> letterCombinations(String digits) { List<String> result = new LinkedList<>(); if(digits.length()==0){ return result; } char[] d = digits.toCharArray(); String[] table = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; StringBuilder str = new StringBuilder(); HashMap<Character,String> map = new HashMap<>(); for(int i =0;i<d.length;i++){ map.put(d[i],table[d[i]-'0']); } DFS(map,result,d,str,0); return result; } }