罗列出从n中取k个数的组合数组。

首先,求C(n,k)这个实现,很粗糙,溢出也不考虑,好的方法也不考虑。笨蛋。心乱,上来就写。。

另外,发现在递归中,不能申请太大的数组?貌似不是这个问题,是我自己越界了。

/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *columnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int com(int n,int k)
{
int i = ,ans=; if(k > n-k) k = n-k; for (i = n; i > n - k; i--)
ans *= i;
for (i = k; i > ; i--)
ans /= i;
return ans;
} int **ans;
int len; void back_track(int *last, int last_size, int num, int n, int k)
{
if(last_size == k)
{
int *tmp = (int*)malloc(sizeof(int)*k);
memcpy(tmp,last,k*sizeof(int));
ans[len++] = tmp;
//memcpy(ans[len],last,k*sizeof(int));
//len ++;
return;
} if(num > n) return; back_track(last,last_size,num+,n,k);
last[last_size] = num;
back_track(last,last_size + ,num + ,n,k);
}
int** combine(int n, int k, int** columnSizes, int* returnSize) {
if(k > n || n *k == ) { *returnSize = ; return NULL; } int size = com(n,k);
int *cols = (int*)malloc(size*sizeof(int)); ans = (int**)malloc(size*sizeof(int*));
len = ; for(int i = ; i < size; i ++)
{
//ans[i] = (int*)malloc(k*sizeof(int));
cols[i] = k;
} int *last = (int*)malloc(k*sizeof(int));
back_track(last,,,n,k); *columnSizes = cols;
*returnSize = len;
return ans;
}

Leetcode 题解 Combinations:回溯+求排列组合的更多相关文章

  1. 【LeetCode题解】169_求众数(Majority-Element)

    目录 169_求众数(Majority-Element) 描述 解法一:暴力法 思路 Java 实现 Python 实现 复杂度分析 解法二:哈希表 思路 Java 实现 Python 实现 复杂度分 ...

  2. [LeetCode] 系统刷题2_排列组合

    要用到backtracking,是否要跟backtracking放到一起总结? 适用范围: 几乎所有搜索问题 什么时候输出 哪些情况需要跳过 相关题目: [LeetCode] 78. Subsets ...

  3. 快速求排列组合 lucas定理

    对于C(n, m) mod p.这里的n,m,p(p为素数)都很大的情况. 就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了. 一般lucas定理的p ...

  4. hdu 2519 新生晚会 (求排列组合时容易溢出)

    #include<stdio.h> #include<algorithm> using namespace std; void cal(int n,int m) { ; m=m ...

  5. 快速求排列C(m,n)加取模

    快速求排列组合C(m,n)%mod 写在前面: 1. 为防止产生n和m的歧义,本博文一律默认n >= m 2. 本博文默认mod = 10^6+3 3. 本博文假设读者已知排列组合公式 C(m, ...

  6. LeetCode 77 Combinations(排列组合)

    题目链接:https://leetcode.com/problems/combinations/#/description    Problem:给两个正数分别为n和k,求出从1,2.......n这 ...

  7. LeetCode OJ:Combinations (排列组合)

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

  8. [leetcode] 题型整理之排列组合

    一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...

  9. 【BZOJ】4555: [Tjoi2016&Heoi2016]求和 排列组合+多项式求逆 或 斯特林数+NTT

    [题意]给定n,求Σi=0~nΣj=1~i s(i,j)*2^j*j!,n<=10^5. [算法]生成函数+排列组合+多项式求逆 [题解]参考: [BZOJ4555][Tjoi2016& ...

随机推荐

  1. [转][xml]SQL转义

    SQL语句包含">"和"<"时,在PL/SQL中可以正常运行,但是放在XML中,编译报错,这是因为在XML文档中的所有文本都会被解析器解析,文本内容 ...

  2. 【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html   ...

  3. MCC MNC in china

    A mobile country code (MCC) is used in combination with a mobile network code (MNC) (a combination k ...

  4. SAS 输出内容到HTML

    OPTIONS USER=SASHELP; ODS TAGSETS.HTMLPANEL PATH='F:\'(URL=NONE) FILE='A.HTML'; ODS GRAPHICS ON/IMAG ...

  5. js基本方法

    Math.random() 日期时间函数(需要用变量调用):var b = new Date(); //获取当前时间b.getTime() //获取时间戳b.getFullYear() //获取年份b ...

  6. 9 个鲜为人知的 Python 数据科学库

    除了 pandas.scikit-learn 和 matplotlib,还要学习一些用 Python 进行数据科学的新技巧. Python 是一种令人惊叹的语言.事实上,它是世界上增长最快的编程语言之 ...

  7. [ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)

    /* 题目中的神仙性质真的是令人愉悦 因为我一眼看成了每个点的度数不超过二十, 心想这他喵的和字符串什么关系 统计树上不同子串个数, 按道理直接dfs n次把所有的串插到后缀自动机里就行了 但是我们发 ...

  8. gulp安装,淘宝镜像

    命令:express -e ./ express表示安装express -e表示使用ejs作为模板 ./表示当前目录中 (使用上面的命令之前我们应该使用npm安装express框架 sudo npm ...

  9. 【Jmeter自学】Jmeter实战-web程序(六)

    1.确认测试被测对象 **网站 windows环境 2.需求: 并发登录性能测试 3.场景设置: 1s增加2个线程,运行2000次 分别查看20,,60并发下的表现 4.监控 成功率 响应时间 标准差 ...

  10. 企业项目构建学习(一)maven

    <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...