• 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 };
  • 相关阅读:
    [Bootstrap]全局样式(四)
    [Bootstrap]全局样式(三)
    [Bootstrap]全局样式(二)
    [Bootstrap]全局样式(一)
    [Bootstrap]概述
    原生JS-----一个剪刀石头布游戏
    聊聊 ES6 中的箭头函数
    jQuery中的 AJAX
    AJAX封装
    AJAX 初识
  • 原文地址:https://www.cnblogs.com/guyufei/p/3408603.html
Copyright © 2020-2023  润新知