组合排序回溯编程题集合(leetcode)
创始人
2025-05-29 11:53:21
0

回溯算法主要用于解决组合,切割,排序,子集,棋盘问题。

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
 public  List> combine(int n, int k) {List> lists=new ArrayList<>();if(k<=0||n list=new ArrayList<>();backtack(n,k,1,lists,list);return  lists;}public  void backtracking(int n,int k,int start,List> lists,ArrayList list){if(list.size()==k){lists.add(new ArrayList<>(list));return;}for(int i=start;i<=n;i++){
//            if(list.contains(i))
//                continue;list.add(i);backtack(n,k,i+1,lists,list);list.remove(list.size()-1);}}
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用 一次 。
输入: candidates = [10,1,2,7,6,1,5], target = 8,
输出:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]
public List> combinationSum2(int[] candidates, int target) {List> lists=new ArrayList<>();List list=new ArrayList<>();Arrays.sort(candidates);backtracking(lists,list,target,candidates,0);return lists;}public void backtracking(List> lists,List list,int target,int[] candidates,int start){Integer collect = list.stream().collect(Collectors.summingInt(Integer::intValue));if(collect==target) {lists.add(new ArrayList<>(list));return;}if(collect>target)return;for(int i=start;itarget)continue;//同一层数值相同,需要剪掉,不然会造成重复if(i > start && candidates[i] == candidates[i-1]){continue;}list.add(candidates[i]);backtracking(lists,list,target,candidates,i+1);list.remove(list.size()-1);}}
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
输入:k = 3, n = 7 输出: [[1,2,4]] 解释: 1 + 2 + 4 = 7 没有其他符合的组合了。
 public List> combinationSum3(int k, int n) {List> lists=new ArrayList<>();List list=new ArrayList<>();int[] array=new int[]{1,2,3,4,5,6,7,8,9};int sum = Arrays.stream(array).limit(k).sum();if(sum>n)return lists;tracking(lists,list,k,n,0,array);return lists;}public void tracking(List> lists,List list,int k,int n,int start,int[] array){int sum = list.stream().mapToInt(Integer::intValue).sum();if(sum==n&&list.size()==k){lists.add(new ArrayList<>(list));return;}if(sum>n||list.size()>k)return;for(int i=start;in)continue;list.add(array[i]);tracking(lists,list,k,n,i+1,array);list.remove(list.size()-1);}}
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
public  List> permute(int[] nums) {List> lists=new ArrayList<>();if(nums.length==0)return lists;ArrayList list=new ArrayList<>();backtracking(lists,list,nums);return  lists;}public  void backtracking(List> lists,ArrayList list,int[] nums){if(list.size()==nums.length){lists.add(new ArrayList<>(list));return;}for(int i=0;i

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...