コード例 #1
0
 std::vector<std::vector<int> > combinationSum2(std::vector<int> &candidates, int target) {
     std::sort(candidates.begin(), candidates.end());
     std::vector<std::vector<int> > res;
     std::vector<int> combination;
     combinationSum2(candidates, target, res, combination, 0);
     return res;
 }
 vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
   vector<vector<int>> result;
   vector<int> combination;
   sort(candidates.begin(), candidates.end());
   combinationSum2(candidates, 0, target, result, combination);
   return result;
 }
コード例 #3
0
int main(int argc, char *argv[])
{
	vector<int> num = {1, 1};
	combinationSum2(num, 2);


	return 0;
}
コード例 #4
0
 void combinationSum2(std::vector<int> &candidates, int target, std::vector<std::vector<int> > &res, std::vector<int> &combination, int begin) {
     if  (!target) {
         res.push_back(combination);
         return;
     }
     for (int i = begin; i != candidates.size() && target >= candidates[i]; ++i)
         if (i == begin || candidates[i] != candidates[i - 1]) {
             combination.push_back(candidates[i]);
             combinationSum2(candidates, target - candidates[i], res, combination, i + 1);
             combination.pop_back();
         }
 }
コード例 #5
0
int main(void)
{
	int	x[] = { 10, 1, 2, 7, 6, 1, 5 };
	int	**res, *col, n, i, j;
	res = combinationSum2(x, 7, 8, &col, &n);
	for (i = 0; i < n; i++) {
		for (j = 0; j < col[i]; j++)
			printf("%d ", res[i][j]);
		printf("\n");
	}
	return(0);
}
 void combinationSum2(vector<int>& candidates, int idx, int target, vector<vector<int>>& result, vector<int>& combination) {
   if (!target){
     result.push_back(combination);
     return;
   }
   for (int i = idx; i < candidates.size() && candidates[i] <= target; i++){
     if (i > idx && candidates[i] == candidates[i-1]) continue; // here avoid duplication
     combination.push_back(candidates[i]);
     combinationSum2(candidates, i + 1, target - candidates[i], result, combination);
     combination.pop_back();
   }
 }
コード例 #7
0
int main() {
    int candidates[] = { 4, 4, 2, 1, 4, 2, 2, 1, 3 };
    int target = 6;
    int returnSize;
    int *columnSize;
    int **ans = combinationSum2(candidates, sizeof(candidates) / sizeof(int), target, &columnSize, &returnSize);
    int i, j;
    for (i = 0; i < returnSize; ++i) {
        for (j = 0; j < columnSize[i]; ++j) {
            printf("%d  ", ans[i][j]);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}
コード例 #8
0
ファイル: solution.c プロジェクト: gliangtao/leetcode
int main(int argc, char** argv) {
    struct timeval tvStart, tvEnd;
    int retSize, *colSizes;
    gettimeofday(&tvStart, NULL);
    combinationSum2(C, sizeof(C) / sizeof(C[0]), T, &colSizes, &retSize);
    gettimeofday(&tvEnd, NULL);
    printf("Found %d combinations for target %d\n", retSize, T);
    int ds = tvEnd.tv_sec - tvStart.tv_sec;
    int dus = tvEnd.tv_usec - tvStart.tv_usec;
    if (dus < 0) {
        ds--;
        dus += 1000000;
    }
    DBG("Time %d.%06d, combinationSum\n", ds, dus);
    return 0;
}
コード例 #9
0
void SubSetTest::testCombination( void )
{
	int arr[] = {1, 4, 6, 5, 3, 2};   //1 5 2 3 4 6
	vector<int> vec;
	vec.insert(vec.begin(), arr, arr + sizeof(arr) / sizeof(int));
	vector<vector<int>> rst = combinationSum2(vec, 5);
	for (int i = 0; i < rst.size(); ++i)
	{
		for (int j = 0; j < rst[i].size(); ++j)
		{
			cout<<rst[i][j]<<" ";
		}
		cout<<endl;
	}

}
コード例 #10
0
 vector<vector<int>> combinationSum3(int k, int n) {
     vector<int> num;
     for (int i = 1; i <= 9; ++i)
         num.push_back(i);
     return combinationSum2(num, k, n);
 }