2.1.2.一串數列中取n個數字, 共有幾種組合

  • example code

              class Solution {
                  vector<int> hour = {1, 2, 4, 8};
                  vector<int> minute = {1, 2, 4, 8, 16, 32};
              public:
                  vector<string> readBinaryWatch(int num) {
    
                      vector<string> res;
                      //初始值: time = 00:00, start point = 0
                      helper(res, make_pair(0, 0), num, 0);
                      return res;
                  }
                  //res: 儲存字串
                  //time: 累積時間
                  //num: 剩餘數量
                  //start_point: 數量起始值
                  void helper(vector<string>& res, pair<int, int> time, int num, int start_point){
                      //終止條件: 剩餘數量=0
                      if(num == 0){
                          res.push_back(to_string(time.first) + (time.second < 10 ? ":0" : ":") + to_string(time.second));
                          return;
                      }
                      for(int i = start_point; i < hour.size() + minute.size(); i++){
                          if(i < hour.size()){
                              //hour
                              time.first = time.first + hour[i];
                              if(time.first < 12){
                                  helper(res, time, num - 1, i + 1);
                              }
                              time.first = time.first - hour[i];
                          }else{
                              //minute
                              time.second = time.second + minute[i - hour.size() ];
                              if(time.second < 60){
                                  helper(res, time, num - 1, i + 1);
                              }
                              time.second = time.second - minute[i - hour.size() ];
                          }
                      }
                  }
              };

Last updated