算法面试——深度优先搜索:全排列、组合总和、岛屿数量

📅 2026/8/3 1:33:46
算法面试——深度优先搜索:全排列、组合总和、岛屿数量
一、全排列publicListListIntegerpermute(int[]nums){ListListIntegerresultnewArrayList();backtrack(nums,newboolean[nums.length],newArrayList(),result);returnresult;}privatevoidbacktrack(int[]nums,boolean[]used,ListIntegerpath,ListListIntegerresult){if(path.size()nums.length){result.add(newArrayList(path));return;}for(inti0;inums.length;i){if(used[i])continue;used[i]true;path.add(nums[i]);backtrack(nums,used,path,result);path.remove(path.size()-1);used[i]false;}}二、组合总和publicListListIntegercombinationSum(int[]nums,inttarget){ListListIntegerresultnewArrayList();backtrack(nums,target,0,newArrayList(),result);returnresult;}privatevoidbacktrack(int[]nums,intremain,intstart,ListIntegerpath,ListListIntegerresult){if(remain0){result.add(newArrayList(path));return;}if(remain0)return;for(intistart;inums.length;i){path.add(nums[i]);backtrack(nums,remain-nums[i],i,path,result);path.remove(path.size()-1);}}三、岛屿数量publicintnumIslands(char[][]grid){intcount0;for(inti0;igrid.length;i)for(intj0;jgrid[0].length;j)if(grid[i][j]1){dfs(grid,i,j);count;}returncount;}privatevoiddfs(char[][]g,intr,intc){if(r0||c0||rg.length||cg[0].length||g[r][c]!1)return;g[r][c]0;dfs(g,r1,c);dfs(g,r-1,c);dfs(g,r,c1);dfs(g,r,c-1);} 觉得有用的话点赞 关注【张老师技术栈】吧