-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path77. Combinations.cpp
More file actions
57 lines (53 loc) · 1.21 KB
/
77. Combinations.cpp
File metadata and controls
57 lines (53 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
77. Combinations
*/
#include<stdio.h>
#include<stdlib.h>
void helper(int nums, int n, int k, int count, int *subset,int*columnSizes ,int *size,int **res);
int** combine(int n, int k, int** columnSizes, int* returnSize) {
int *subset = (int*)malloc(sizeof(int)*k);
(*columnSizes) = (int*)malloc(sizeof(int)*10000);
int count=0,size=0,start = 0;
int **res = (int**)malloc(sizeof(int*)*10000);
helper(start,n,k,count,subset,*columnSizes,&size,res);
*returnSize = size;
return res;
}
void helper(int start, int n, int k, int count, int *subset,int*columnSizes, int *size,int **res)
{
int i;
if(count>=k){
int s = *size;
res[s] = (int*)malloc(sizeof(int)*k);
columnSizes[s] = k;
for( i = 0; i < k; i++ ){
res[s][i] = subset[i];
}
(*size)++;
return;
}
/*dfs*/
for( i = start; i < n; i++ ){
if( k-count > n-i ){ /*ºóÐøÊý×ÖÊýÁ¿²»¹» ·µ»Ø*/
return;
}
subset[count++] = i+1;
helper(i+1,n,k,count,subset,columnSizes,size,res);
count--;
}
}
int main()
{
int n = 4;
int k = 2;
int *columnSizes;
int size;
int **res;
res = combine(n,k,&columnSizes,&size);
for( int i = 0; i < size; i++ ){
for( int j = 0; j < k; j++ ){
printf("%d\t",res[i][j]);
}
printf("\n");
}
}