मान लीजिए हमारे पास धनात्मक पूर्णांकों की एक सूची है; आसन्न पूर्णांक फ्लोट विभाजन करेंगे। उदाहरण के लिए, [2,3,4] -> 2/3/4। अब, हम इन संचालन की प्राथमिकता बदलने के लिए किसी भी स्थिति पर कितने भी कोष्ठक जोड़ सकते हैं। हमें यह ढूंढना है कि अधिकतम परिणाम प्राप्त करने के लिए कोष्ठक कैसे जोड़ें, हमें स्ट्रिंग प्रारूप में संबंधित अभिव्यक्ति ढूंढनी है। हमारे अभिव्यक्ति में अनावश्यक कोष्ठक नहीं होने चाहिए। इसलिए यदि इनपुट [1000,100,10,2] है, तो परिणाम "1000/(100/10/2)" होगा।
हल का दृष्टिकोण
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
n := nums सरणी का आकार- यदि n = 0 तो खाली स्ट्रिंग लौटाएं।
num := nums[0] को स्ट्रिंग के रूप में- यदि n = 1, तो
numलौटाएं - यदि n = 2, तो
num + "/" + nums[1] को स्ट्रिंग के रूप मेंलौटाएं den := एक खाली स्ट्रिंगi = 1 से n-1तक:den := den + nums[i] को स्ट्रिंग के रूप में- यदि i, n-1 नहीं है, तो
den := den + "/"
num + "/" + "(" + den + ")"लौटाएं
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string optimalDivision(vector<int>& nums) {
int n = nums.size();
if(n == 0) return "";
string num = to_string(nums[0]);
if(n == 1) return num;
if(n == 2) return num + "/" + to_string(nums[1]);
string den = "";
for(int i = 1; i < n; i++){
den += to_string(nums[i]);
if(i != n - 1) den += "/";
}
return num + "/" + "(" + den + ")";
}
};
int main(){
vector<int> v = {1000,100,10,2};
Solution ob;
cout << (ob.optimalDivision(v));
}
इनपुट
[1000,100,10,2]
आउटपुट
1000/(100/10/2)