• Careercup


    2014-05-02 09:40

    题目链接

    原题:

    Given a number N, write a program that returns all possible combinations of numbers that add up to N, as lists. (Exclude the N+0=N) 
    
    For example, if N=4 return {{1,1,1,1},{1,1,2},{2,2},{1,3}}

    题目:给定一个正整数N,求出所有的由正整数加起来等于N的可能组合(加数保持升序)。比如N = 4的时候,结果是{{1,1,1,1},{1,1,2},{2,2},{1,3}}。

    解法:递归解决即可。

    代码:

     1 // http://www.careercup.com/question?id=6321181669982208
     2 #include <iostream>
     3 #include <vector>
     4 using namespace std;
     5 
     6 void DFS(int cur, int remain, vector<vector<int> > &result, vector<int> &sum)
     7 {
     8     if (remain == 0) {
     9         result.push_back(sum);
    10         return;
    11     }
    12     if (remain < cur) {
    13         return;
    14     }
    15     
    16     int i;
    17     for (i = cur; i <= remain; ++i) {
    18         if (remain - i != 0 && remain - i < i) {
    19             continue;
    20         }
    21         sum.push_back(i);
    22         DFS(i, remain - i, result, sum);
    23         sum.pop_back();
    24     }
    25 }
    26 
    27 int main()
    28 {
    29     int n;
    30     vector<int> sum;
    31     vector<vector<int> > result;
    32     int i, j;
    33     
    34     while (cin >> n && n > 0) {
    35         DFS(1, n, result, sum);
    36         
    37         cout << "{" << endl;
    38         for (i = 0; i < (int)result.size(); ++i) {
    39             cout << "    {";
    40             for (j = 0; j < (int)result[i].size(); ++j) {
    41                 j ? cout << ", ", 1: 1;
    42                 cout << result[i][j];
    43             }
    44             cout << "}" << endl;
    45         }
    46         cout << "}" << endl;
    47         
    48         sum.clear();
    49         for (i = 0; i < (int)result.size(); ++i) {
    50             result[i].clear();
    51         }
    52         result.clear();
    53     }
    54     
    55     return 0;
    56 }
  • 相关阅读:
    [Go] Slice
    [Go] Array
    [Go] if scoped variable
    AcWing 345 牛站 【BellmanFord算法,非正解】
    AcWing 345 牛站
    P1962 斐波那契数列
    【Oracle】Oracle的回滚段和同时读写的处理
    【Mybatis】Mybatis的批量执行SQL语句 与 返回值问题
    @RestController的依赖包
    【ObjectMapper/Json】Json转字符串数组和对象数组
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3703705.html
Copyright © 2020-2023  润新知