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
Was this helpful?