[Leetcode/C++] 179_Largest Number
問題は次のとおりです.
優先キューを使用し、優先キューで演算子の再ロードでソートして問題を解決します.
プールは次のとおりです.
class Solution {
public:
struct compare{
bool operator()(int a, int b){
string s1 = to_string(a); string s2 = to_string(b);
return s1+s2 < s2+s1; // string으로 비교
}
};
string largestNumber(vector<int>& nums) {
priority_queue<int, vector<int>, compare> pq;
for(int i=0; i<nums.size(); i++){
pq.push(nums[i]);
}
string s;
while(!pq.empty()){
s += to_string(pq.top());
pq.pop();
}
if(s[0]=='0') return "0";
else return s;
}
};
うーん、この問題で混同されている部分は、最初は単純にs 1
私が初めて考えた時はこの状況を除いて
もう一度考えてみると、2つの文字列を加算すると、330と303が比較されると、左側が大きくなります.
したがって、s 1+s 2
class Solution {
public:
string largestNumber(vector<int>& nums) {
sort(nums.begin(),nums.end(),[](int &a,int &b){
string s1=to_string(a);
string s2=to_string(b);
return s1+s2>s2+s1;
});
string ans="";
for(int i=0;i<nums.size();i++){
string s=to_string(nums[i]);
ans += s;
}
if(ans[0]=='0'){
return "0";
}
return ans;
}
};
Reference
この問題について([Leetcode/C++] 179_Largest Number), 我々は、より多くの情報をここで見つけました https://velog.io/@ssssujini99/LeetcodeC-179Largest-Numberテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol