ในปัญหาที่กำหนด เราได้รับสตริงที่ประกอบด้วย 0 และ 1 เราจะต้องค้นหาจำนวนการเรียงสับเปลี่ยนทั้งหมดเพื่อให้สตริงเริ่มต้นด้วย 1 เนื่องจากคำตอบอาจมีจำนวนมหาศาล เราจึงพิมพ์เป็นม็อดที่มี 100,000,000,000
Input : str ="10101001001" Output : 210 Input : str ="101110011" Output : 56
เราจะแก้ปัญหานี้โดยการใช้ combinatorics และสร้างสูตรขึ้นมาเพื่อแก้ปัญหานี้
แนวทางในการหาทางออก
ในแนวทางนี้ เราจะคำนวณจำนวน 0 และ 1 ทีนี้ สมมุติว่า n คือจำนวน 1 ที่มีอยู่ในสตริงของเรา และ m เป็นจำนวน 0 ที่มีอยู่ในสตริงของเรา และให้ L เป็นความยาวของสตริงที่เรากำหนด ดังนั้นสูตรที่เราทำเพื่อแก้ปัญหานี้คือ (L-1 )!/ (n-1)! * ม!.
ตัวอย่าง
#include <bits/stdc++.h> #define MOD 1000000007 // defining 1e9 + 7 as MOD using namespace std; long long fact(long long n) { if(n <= 1) return 1; return ((n % MOD) * (fact(n-1) % MOD)) % MOD; } int main() { string s = "101110011"; long long L = s.size(); // length of given string long long count_1 = 0, count_0 = 0; // keeping count of 1's and 0's for(auto x : s) { if(x == '1') count_1++; // frequency of 1's else count_0++; // frequency of 0's } if(count_1 == 0){ cout << "0\n"; // if string only consists of 0's so our answer will be 0 } else { long long factL = fact(L-1); // (L-1)! long long factn = fact(count_1 - 1); // (n-1)! long long factm = fact(count_0); // m! long long ans = factL / (factn * factm); // putting the formula cout << ans << "\n"; } return 0; }
ผลลัพธ์
56
โปรแกรมที่กำหนดมีเวลาซับซ้อนของ O(N) โดยที่ n คือความยาวของสตริงที่เรากำหนด
คำอธิบายของโค้ดด้านบน
ในแนวทางนี้ เรากำลังนับจำนวน 1 และ 0 ที่มีอยู่ในสตริงของเราตอนนี้ เราวางหนึ่งไว้ที่จุดเริ่มต้น และตอนนี้กำหนดพีชคณิตที่เป็นไปได้ทั้งหมดของ 0 และ 1 ในสตริงของความยาว L-1 ดังนั้นโดยการกำหนดนี้เรา ได้สูตรของ (L-1)! / (n-1)! * ม! ที่ไหน (n-1)! คือพีชคณิตของ 1 ที่เหลือและ m! คือการเปลี่ยนแปลงของ 0
บทสรุป
ในบทความนี้ เราแก้ปัญหาเพื่อค้นหาจำนวนการเรียงสับเปลี่ยนที่ไม่ซ้ำกันโดยเริ่มจาก 1 สตริงไบนารีโดยใช้ combinatorics และสร้างสูตรขึ้นมา
นอกจากนี้เรายังได้เรียนรู้โปรแกรม C ++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ ( Normal) ซึ่งเราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์