zoukankan      html  css  js  c++  java
  • 组合数计算

     1 #include <iostream>
     2 #include <unordered_map>
     3 #include <algorithm>
     4 #include <vector>
     5 #include <queue>
     6 
     7 using namespace std;
     8 
     9 class Solution
    10 {
    11     private:
    12         int need_typesize;
    13         int total_typesize = 43;
    14         int result = 0;
    15     public:
    16         int DFS(int number)
    17         {
    18             need_typesize = number;
    19             vector<int> tmp;
    20             _DFS(0,tmp);
    21             return result;
    22         }
    23         void _DFS(int start,vector<int>& tmp)
    24         {
    25             if(tmp.size()==need_typesize)
    26             {
    27                 result ++;
    28             }
    29             else if(tmp.size()<need_typesize)
    30             {
    31                 for(int i = start;i < total_typesize;i ++)
    32                 {
    33                 //    vector<int> tmp2 = tmp;
    34                 //    _DFS(start+1,tmp2);
    35                     tmp.emplace_back(i);
    36                     _DFS(start+1,tmp);
    37                     tmp.pop_back();
    38                 }
    39             }
    40         }
    41 };
    42 
    43 int main()
    44 {
    45     Solution obj;
    46     int result = obj.DFS(3);
    47     cout << result << endl;
    48 //    for(auto v:result)
    49 //    {
    50 //        for(auto s:v)
    51 //        {
    52 //            cout << s << " ";
    53 //        }
    54 //        cout << endl;
    55 //    }
    56     return 0;
    57 }
    有顺序没重复
     1 #include <iostream>
     2 #include <unordered_map>
     3 #include <algorithm>
     4 #include <vector>
     5 #include <queue>
     6 
     7 using namespace std;
     8 
     9 class Solution
    10 {
    11     private:
    12         int need_typesize;
    13         int total_typesize = 23;
    14         int result = 0;
    15     public:
    16         int DFS(int number)
    17         {
    18             need_typesize = number;
    19             vector<int> tmp;
    20             _DFS(tmp);
    21             return result;
    22         }
    23         void _DFS(vector<int>& tmp)
    24         {
    25             if(tmp.size()==need_typesize)
    26             {
    27                 result ++;
    28             }
    29             else if(tmp.size()<need_typesize)
    30             {
    31                 for(int i = 0;i < total_typesize;i ++)
    32                 {
    33                 //    vector<int> tmp2 = tmp;
    34                 //    _DFS(start+1,tmp2);
    35                     tmp.emplace_back(i);
    36                     _DFS(tmp);
    37                     tmp.pop_back();
    38                 }
    39             }
    40         }
    41 };
    42 
    43 int main()
    44 {
    45     Solution obj;
    46     int result = obj.DFS(6);
    47     cout << result << endl;
    48 //    for(auto v:result)
    49 //    {
    50 //        for(auto s:v)
    51 //        {
    52 //            cout << s << " ";
    53 //        }
    54 //        cout << endl;
    55 //    }
    56     return 0;
    57 }
    有顺序有重复
     1 #include <iostream>
     2 #include <unordered_map>
     3 #include <algorithm>
     4 #include <vector>
     5 #include <queue>
     6 
     7 using namespace std;
     8 
     9 class Solution
    10 {
    11     private:
    12         int need_typesize;
    13         int total_typesize = 19;
    14         int result = 0;
    15     public:
    16         int DFS(int number)
    17         {
    18             need_typesize = number;
    19             vector<int> tmp;
    20             _DFS(0,tmp);
    21             return result;
    22         }
    23         void _DFS(int start,vector<int>& tmp)
    24         {
    25             if(tmp.size()==need_typesize)
    26             {
    27                 result ++;
    28             //    for(auto d:tmp)
    29             //        cout << d << " ";
    30             //    cout << endl;
    31             }
    32             else if(tmp.size()<need_typesize)
    33             {
    34                 for(int i = start;i < total_typesize;i ++)
    35                 {
    36                 //    vector<int> tmp2 = tmp;
    37                 //    _DFS(start+1,tmp2);
    38                     tmp.emplace_back(i);
    39                     _DFS(i,tmp);
    40                     tmp.pop_back();
    41                 }
    42             }
    43         }
    44 };
    45 
    46 int main()
    47 {
    48     Solution obj;
    49     int result = obj.DFS(6);
    50     cout << result << endl;
    51 //    for(auto v:result)
    52 //    {
    53 //        for(auto s:v)
    54 //        {
    55 //            cout << s << " ";
    56 //        }
    57 //        cout << endl;
    58 //    }
    59     return 0;
    60 }
    没顺序有重复
     1 #include <iostream>
     2 #include <unordered_map>
     3 #include <algorithm>
     4 #include <vector>
     5 #include <queue>
     6 
     7 using namespace std;
     8 
     9 class Solution
    10 {
    11     private:
    12         int need_typesize;
    13         int total_typesize = 19;
    14         int result = 0;
    15     public:
    16         int DFS(int number)
    17         {
    18             need_typesize = number;
    19             vector<int> tmp;
    20             _DFS(0,tmp);
    21             return result;
    22         }
    23         void _DFS(int start,vector<int>& tmp)
    24         {
    25             if(tmp.size()==need_typesize)
    26             {
    27                 result ++;
    28             //    for(auto d:tmp)
    29             //        cout << d << " ";
    30             //    cout << endl;
    31             }
    32             else if(tmp.size()<need_typesize)
    33             {
    34                 for(int i = start;i < total_typesize;i ++)
    35                 {
    36                 //    vector<int> tmp2 = tmp;
    37                 //    _DFS(start+1,tmp2);
    38                     tmp.emplace_back(i);
    39                     _DFS(i+1,tmp);
    40                     tmp.pop_back();
    41                 }
    42             }
    43         }
    44 };
    45 
    46 int main()
    47 {
    48     Solution obj;
    49     int result = obj.DFS(6);
    50     cout << result << endl;
    51 //    for(auto v:result)
    52 //    {
    53 //        for(auto s:v)
    54 //        {
    55 //            cout << s << " ";
    56 //        }
    57 //        cout << endl;
    58 //    }
    59     return 0;
    60 }
    没顺序没重复

    Solution类里的语句

    int total_typesize = 43;

    表明的是组合数中的C n底m中的n,而主函数调用中的语句

    int result = obj.DFS(3);
    

    表明的是组合数中的C n底m中的m。顺序和重复参考网站   https://zh.numberempire.com/combinatorialcalculator.php

    另程序运行慢的原因是过了一遍所有的组合,想要存储全部组合的话,把变量result的类型改为vector<vector<int>>类型后,再把在Soluton类的语句

    if(tmp.size()==need_typesize)
    {
        result ++;
    }

    改为

    if(tmp.size()==need_typesize)
    {
        result.push_back(tmp);
    }

    即可。

  • 相关阅读:
    IDEA系列(七)--给自己的IDEA一个酷炫的主题吧
    Swagger入参为List
    Mac系统 JDK版本切换
    equals方法被调用时字符串和对象的顺序
    MongoDB简介
    2018-5-18 东方微银Java笔试题
    Java基本数据类型之char
    Java实例——简单的汽车销售4S店
    Java实例——格式化当前日期
    Java实例——为新员工分配部门
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9494852.html
Copyright © 2011-2022 走看看