首页 > 其他分享 >剑指offer80:包含k个元素的组合

剑指offer80:包含k个元素的组合

时间:2022-12-13 11:33:19浏览次数:47  
标签:LinkedList combination int 元素 List offer80 组合 result helper


**题目:**给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。

输入: n = 4, k = 2

输出:

[

[2,4],

[3,4],

[2,3],

[1,2],

[1,3],

[1,4],

]

输入: n = 1, k = 1

输出: [[1]]

解析:

该题的思路和剑指offer79题大致相同,这是上一题的思路图:

如果n=3,k=2,找到所有k个数的组合,那在上一题的基础上筛选就可以了,比如画红圈的地方。

剑指offer80:包含k个元素的组合_List

代码:

import java.util.LinkedList;
import java.util.List;

public class Combine {
public static void main(String[] args) {
Combine combine = new Combine();
List<List<Integer>> combine1 = combine.combine(4, 2);
System.out.println(combine1);
}
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> result = new LinkedList<>();
LinkedList<Integer> combination = new LinkedList<>();
// i相当于回溯树的层数
helper(n,k,1,combination,result);
return result;
}

private void helper(int n, int k,int i ,LinkedList<Integer> combination, List<List<Integer>> result) {
// 如果combination的列表中的元素个数到达k个,result则添加combination的拷贝
if (combination.size() == k){
result.add(new LinkedList<>(combination));
}else if (i <= n){
helper(n,k,i+1,combination,result);
combination.add(i);
helper(n,k,i+1,combination,result);
// 从列表中删除并返回最后一个元素
combination.removeLast();
}
}
}

剑指offer80:包含k个元素的组合_List_02


标签:LinkedList,combination,int,元素,List,offer80,组合,result,helper
From: https://blog.51cto.com/u_15911055/5933497

相关文章

  • 计算一个数组中L位置到R位置的数组元素之和
    计算一个数组中L位置到R位置的数组元素之和解题思路一:我们很容易想到遍历数组,遍历数组L位置到R位置的元素并相机得到和代码:publicclassPreSum{ publicstaticcl......
  • Selenium12--元素基本操作
    文本框和文本域点击:click()清空:clear()输入:send_keys("数据")保留原内容,追加输入文本域输入换行时使用转义字符\n来表示获得属性值get_attribut......
  • 27. 移除元素
    27.移除元素力扣题目链接我的代码:左右指针交换,O(n)classSolution{publicintremoveElement(int[]nums,intval){if(nums.length==0){......
  • Python各个列表交叉进行排列组合
    示例v_list=[["1.mp4","2.mp4"],["3.mp4"],["6.mp4","7.mp4"],[],[]]我想把这个列表里面的各个列表,重新排列组合但是我不知道列表里套了几个列表,套的列表里有......
  • Selenium10--查找一组元素
    find_element方法查找一个元素用find_element方法,返回一个webelement页面元素对象。""" 打开首页,关键字文本框反复输入,搜索后再次输入"""fromseleniumimportweb......
  • day2-2022.12.11-浅浅了解div元素
    <template><div><divclass="box"><divclass="bq">div是一个块级元素,是块级元素,块级元素独占一行,红色边框为一行......
  • STL使用迭代器遍历和删除元素
    STL使用迭代器遍历和删除元素vector迭代器使用不当造成挂死或死循环错误用法#include<vector>voidvec_erase_item(std::vector<int>&vec,intvalue){for(au......
  • WinForm(六)组合布局属性
    WinForm是基于控件的,不像code+mark的架构,可以非常灵活的用mark来布局,它只能用控件布局属性和窗口控件来完成对UI的布局。容器控件有一组控件叫容器控件,对布局特别有作......
  • WinForm(六)组合布局属性
    WinForm是基于控件的,不像code+mark的架构,可以非常灵活的用mark来布局,它只能用控件布局属性和窗口控件来完成对UI的布局。容器控件有一组控件叫容器控件,对布局特别有作用......
  • WinForm(六)组合布局属性
    WinForm是基于控件的,不像code+mark的架构,可以非常灵活的用mark来布局,它只能用控件布局属性和窗口控件来完成对UI的布局。容器控件有一组控件叫容器控件,对布局特别有作......