Data structure & Algorithm
  • Initial page
  • 1212
  • 121231
  • 2.algorithm
    • 2.1.backtracking
      • 2.1.1.連續序列的排列組合(可能會重複)
      • 2.1.3.一串數列中任取n個數字, 總共有幾種組合
      • 2.1.2.一串數列中取n個數字, 共有幾種組合
    • 2.5.Quick sort
    • 2.6.2.6.廣度優先搜尋 (Breadth-first Search)
    • 2.2.Binary Search
    • 2.1.Backtracking
    • 2.4.河內塔 (Tower of Hanoi)
    • 2.7.動態規劃
    • 2.8.深度優先搜尋 (Depth-first Search)
    • 2.7.二分搜尋法
    • 2.3.分治法 (Divide and Conquer)
  • 2.Count and Say
  • 1.Leetcode Algorithm Practice
  • 2-count-and-say
    • c-solution
    • javascript-solution
  • Algorithm
  • 123
Powered by GitBook
On this page

Was this helpful?

  1. 2.algorithm
  2. 2.1.backtracking

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() ];
                          }
                      }
                  }
              };
Previous2.1.3.一串數列中任取n個數字, 總共有幾種組合Next2.5.Quick sort

Last updated 5 years ago

Was this helpful?