Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

For example,

If n = 4 and k = 2, a solution is:

[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

思路:此题意思是给一个n,和k,求1-n的k个数的组合。没有反复(位置交换算反复)。可用排列组合的统一公式求解。

代码例如以下:

public class Solution {
boolean[] f;
List<List<Integer>> list;
public List<List<Integer>> combine(int n, int k) {
list = new ArrayList<List<Integer>>(); if(k > n || k < 1){//必须是有效k值
return list;
}
f = new boolean[n];
int[] a = new int[n];
for(int i=0; i < n; i++){
a[i] = i+1;//将数填充
}
mm = n-1;
count(a,"",k,n,0);//调用函数
return list;
}
/**
* 实现对k个数字的排练组合
* @param a 数组
* @param s 排练组合得到的结果
* @param nn 排练组合的数字个数
*/
int kk = 0;
int mm;
private void count(int[] a,String s,int nn,int n,int j){
if(nn == 0){//处理结果
String[] sa = s.split(",");//切割数组
List<Integer> al = new ArrayList<Integer>();
for(int i = 0;i < sa.length; i++){
if(sa[i].length() > 0)//仅仅有当不为空的时候才加入
al.add(Integer.parseInt(sa[i]));//加入
}
list.add(al);
return;
}
//遍历,从i=j開始,仅仅要i开头的与i大的值
for(int i = j; i < a.length; i++){
if(!f[i]){
f[i] = true;
count(a,s + "," + a[i],nn-1,n,i+1);//调用下一个为false的数字
f[i] = false;
}
}
}
}

最新文章

  1. MapReduce和Spark写入Hbase多表总结
  2. centos yum换阿里云源
  3. 说说JavaScriptCore
  4. ubuntu 16.04 挂起后WiFi链接不上
  5. 【转】Ubuntu网卡配置
  6. Shell Python 日期和时间戳的互相转换
  7. 死锁及oracle死锁--转载
  8. Nginx 开启 path_info功能
  9. C# 获取打印机状态
  10. spring mvc 数据绑定
  11. 网络笔记01-3 socket 实现百度页面的两种方式
  12. 简单的jquery选择器的实现
  13. PHP 递归创建目录
  14. linux btp 服务器 端及客户端配置
  15. [Oracle] - 性能优化工具(5) - AWRSQL
  16. 还在用ListView?
  17. mono 判断系统的网络是否可用
  18. Oculus Rift DK2 安装所需电脑配置
  19. Cocos2d-x 3.1.1 学习日志14--CocosStudio学习必看
  20. robot framework 牛刀一试

热门文章

  1. UML学习(二)- 用例图
  2. js 给json添加新的字段,或者添加一组数据,在JS数组指定位置删除、插入、替换元素
  3. 【BIRT】01_在win10上安装BIRT
  4. 关于AWS的备份策略
  5. 【TP3.2与TP5.0区别】
  6. 【NEWS】 ADempiere发布ADempiere 3.8.0路线图【2013年7月28日】
  7. mybatis实战教程(mybatis in action)之三:实现数据的增删改查
  8. Android中源码Launcher主屏幕程序排列详解【安卓Launcher进化一】
  9. Linux命令-压缩解压命令:bzip2、bunzip2
  10. Lintcode---翻转二叉树