Giả sử chúng ta có một danh sách các số được gọi là num, chúng ta phải sắp xếp lại thứ tự của nó để tạo thành số lớn nhất có thể và trả về dưới dạng một chuỗi.
Vì vậy, nếu đầu vào giống như nums =[20, 8, 85, 316], thì đầu ra sẽ là "88531620".
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định tạm thời mảng
- cho mỗi mục tôi trong nums:
- chèn i vào tạm thời dưới dạng chuỗi
- sắp xếp tạm thời mảng dựa trên trình tự từ vựng (kiểm tra hai chuỗi a, b khi a nối b lớn hơn b nối a hay không)
- cho mỗi chuỗi s trong tạm thời:
- res:=res nối s
- trả lại res
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#include <bits/stdc++.h> using namespace std; static bool cmp(string a, string b) { return (a + b) >= (b + a); } string solve(vector<int>& nums) { vector<string> temp; for (int i : nums) { temp.push_back(to_string(i)); } sort(temp.begin(), temp.end(), cmp); string res; for (string s : temp) { res += s; } return res; } int main(){ vector<int> v = {20, 8, 85, 316}; cout << solve(v); }
Đầu vào
{20, 8, 85, 316}
Đầu ra
88531620