输出1,2,3,..,n的所有组合数
[面试常见题系列]:输出1,2,3,..,n的所有组合数
思路:递归算法
从开始往后递增地写数字,当前从now值开始,存储的位置从cur开始,
则显然加上,now..n,都是新的组合数,对于每一个,{ 输出之,然后递归,处理 _c(n, cur+1, a, i+1) }
/* 输出1,2,3,..,n的组合数 */
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
void c(int n)
{
extern void _c(int n, int cur, int *a, int now);
int *a;
a = (int *) malloc(n * sizeof(int));
assert(a != NULL);
_c(n, 0, a, 1);
free(a);
}
void _c(int n, int cur, int *a, int now)
{
int i,j;
for (i=now; i<=n; i++)
{
a[cur] = i;
for (j=0; j<=cur; j++)
{
printf("%d ", a[j]);
}
printf("\n");
_c(n, cur+1, a, i+1);
}
}
int main()
{
c(3);
}
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
void c(int n)
{
extern void _c(int n, int cur, int *a, int now);
int *a;
a = (int *) malloc(n * sizeof(int));
assert(a != NULL);
_c(n, 0, a, 1);
free(a);
}
void _c(int n, int cur, int *a, int now)
{
int i,j;
for (i=now; i<=n; i++)
{
a[cur] = i;
for (j=0; j<=cur; j++)
{
printf("%d ", a[j]);
}
printf("\n");
_c(n, cur+1, a, i+1);
}
}
int main()
{
c(3);
}