zoukankan      html  css  js  c++  java
  • Combinations [LeetCode]

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

    For example,
    If n = 4 and k = 2, a solution is:

    [
      [2,4],
      [3,4],
      [2,3],
      [1,2],
      [1,3],
      [1,4],
    ]
    

      Summary: recursive functions

     1 class Solution {
     2 public:
     3     vector<vector<int> > combine(int n, int k) {
     4         vector<vector<int> > combinations;
     5         if(n == 0 || k == 0 || n < k)
     6             return combinations;
     7         if(k == 1){
     8             for(int i = 1; i <= n; i ++) {
     9                 vector<int> com(1, i);
    10                 combinations.push_back(com);
    11             }
    12             return combinations;
    13         }
    14         
    15         if(k == n){
    16             vector<int> com;
    17             for(int i = 1; i <= n; i ++) {
    18                 com.push_back(i);
    19             }
    20             combinations.push_back(com);
    21             return combinations;
    22         }
    23         
    24         if(k <= n / 2){
    25             for(int i = 0; i <= n - k; i ++){
    26                 if(i == n - k){
    27                     vector<int> com;
    28                     for(int j = n - k + 1; j <= n; j ++)
    29                         com.push_back(j);
    30                     combinations.push_back(com);
    31                     break;
    32                 }
    33                 
    34                 int pick_num = i + 1;
    35                 vector<vector<int> > sub_com = combine(n - pick_num, k - 1);
    36                 for(auto item : sub_com) {
    37                     for(int j = 0; j < item.size(); j ++){
    38                         item[j] += pick_num;                    
    39                     }
    40                     item.insert(item.begin(), pick_num);
    41                     combinations.push_back(item);
    42                 }
    43             }
    44             return combinations; 
    45         }else{
    46             combinations = combine(n, n - k);
    47             vector<vector<int> > counter_combinations;
    48             for(auto item : combinations){
    49                 vector<int> com; 
    50                 int j = 0;
    51                 for(int i = 1; i <= n ; i ++){   
    52                     if(j < item.size() && item[j] == i)
    53                         j ++;
    54                     else 
    55                         com.push_back(i);
    56                 }
    57                 counter_combinations.push_back(com);
    58             }
    59             return counter_combinations;
    60         }
    61             
    62     }
    63 };
  • 相关阅读:
    LeetCode 453 Minimum Moves to Equal Array Elements
    LeetCode 112 Path Sum
    LeetCode 437 Path Sum III
    LeetCode 263 Ugly Number
    Solutions and Summay for Linked List Naive and Easy Questions
    AWS–Sysops notes
    Linked List
    All About Linked List
    datatable fix error–Invalid JSON response
    [转]反编译c#的相关问题
  • 原文地址:https://www.cnblogs.com/guyufei/p/3408603.html
Copyright © 2011-2022 走看看