สมมติว่าเรามีจำนวนเต็มสองจำนวน n และ k เราต้องหาตัวเลข k ที่เป็นไปได้ทั้งหมดจาก 1 ... n ดังนั้น ถ้า n =4 และ k =2 ผลรวมจะเป็น [1,2],[1,3],[1,4],[2,3],[2,4],[3,4 ]]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- เราจะใช้ฟังก์ชันเรียกซ้ำเพื่อแก้ปัญหานี้ ฟังก์ชัน Solve() กำลังรับ n, k, temp array และ start จุดเริ่มต้นคือ 1. ซึ่งจะทำหน้าที่เหมือน
- ถ้าขนาดของ temp array =k ให้ใส่ temp เข้าไปใน res array แล้วคืนค่า
- สำหรับ i :=เริ่ม n,
- ใส่ i ลงใน temp
- แก้(n, k, temp, i + 1)
- ลบหนึ่งองค์ประกอบออกจากจุดสิ้นสุดของอุณหภูมิ
- เรียกใช้ฟังก์ชันการแก้ เช่น Solve(n, k, [])
- ผลตอบแทน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;void print_vector(vector > v){ cout <<"["; for(int i =0; i > res; โมฆะแก้ปัญหา (int n, int k, vector temp, int start =1){ if(temp.size() ==k){ res.push_back(temp); กลับ; } for(int i =start; i <=n; i++){ temp.push_back(i); แก้(n, k, อุณหภูมิ, ผม + 1); temp.pop_back(); } } vector > รวม (int n, int k) { res.clear(); เวกเตอร์ อุณหภูมิ; แก้(n ,k,ชั่วคราว); ผลตอบแทน res; }};main(){ โซลูชัน ob; print_vector(ob.combine(5,3));}
อินพุต
53