Đề bài
Cho một danh sách các số nguyên không âm nums, sắp xếp chúng sao cho khi ghép lại sẽ tạo thành số lớn nhất và trả về số đó dưới dạng chuỗi.
Vì kết quả có thể rất lớn, nên bạn cần trả về một chuỗi thay vì số nguyên.
Ví dụ 1:
Đầu vào: nums = [10,2]
Đầu ra: "210"
Ví dụ 2:
Đầu vào: nums = [3,30,34,5,9]
Đầu ra: "9534330"
Ràng buộc:
1 <= nums.length <= 100
0 <= nums[i] <= 1,000,000,000
Cách làm
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string soLonNhat(int nums[], int n) {
// Chuyển đổi các số trong mảng thành mảng chuỗi
string chuoiNums[n];
for (int i = 0; i < n; i++) {
chuoiNums[i] = to_string(nums[i]);
}
// Sắp xếp các chuỗi theo thứ tự để tạo ra số lớn nhất
sort(chuoiNums, chuoiNums + n, [](string &a, string &b) {
return a + b > b + a;
});
// Nếu số lớn nhất là 0, chỉ cần trả về "0"
if (chuoiNums[0] == "0") {
return "0";
}
// Ghép các chuỗi lại với nhau để tạo thành số lớn nhất
string ketqua;
for (int i = 0; i < n; i++) {
ketqua += chuoiNums[i];
}
return ketqua;
}
int main() {
int nums[] = {3, 30, 34, 5, 9};
int n = sizeof(nums) / sizeof(nums[0]);
cout << "So lon nhat co the tao thanh la: " << soLonNhat(nums, n) << endl;
return 0;
}