สมมติว่าเรามี 2 จำนวนเต็ม n และเริ่มต้น งานของเราคือส่งคืนการเรียงสับเปลี่ยน p ของ (0,1,2.....,2^n -1) ดังนี้ −
- p[0] =เริ่ม
- p[i] และ p[i+1] ต่างกันเพียงบิตเดียวในการแทนค่าไบนารี
- p[0] และ p[2^n -1] จะต้องแตกต่างกันเพียงบิตเดียวในการแทนค่าไบนารี่
ดังนั้นหากอินพุตเป็นเหมือน n =2 และ start =3 ดังนั้นอาร์เรย์ที่ส่งคืนจะเป็น [3,2,0,1] สิ่งเหล่านี้คือ [11,10,00,01]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- คืออาร์เรย์
- สำหรับฉันอยู่ในช่วง 0 ถึง 2^n
- แทรก XOR i XOR i/2 ลงใน ans
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#includeใช้เนมสเปซ std;void print_vector(vector v){ cout <<"["; for(int i =0; i circularPermutation(int n, int start) { vector ans; for(int i =0; i <1< >1)); } ส่งคืน ans; }};main(){ โซลูชัน ob; print_vector(ob.circularPermutation(5,3));}
อินพุต
53