Giả sử chúng ta có một số nguyên không âm; chúng ta có thể hoán đổi hai chữ số cùng một lúc để nhận được số có giá trị lớn nhất. Chúng tôi phải trả lại số có giá trị lớn nhất mà chúng tôi có thể nhận được. Vì vậy, nếu đầu vào là 2736 thì đầu ra sẽ là 7236. Vì vậy, ở đây chúng ta đang hoán đổi 2 và 7.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- num:=cắt từng chữ số khỏi số và tạo danh sách
- num1:=sắp xếp num theo thứ tự ngược lại
- chỉ mục:=0
- while chỉ mục <độ dài của num
- nếu num1 [chỉ mục] không giống với num [chỉ mục]
- a:=mảng con của num từ chỉ mục (chỉ mục + 1) đến cuối
- đảo ngược một
- a:=length of a - index of num [index] of a + index + 1 - 1
- num [index], num [a]:=num [a], num [index]
- phá vỡ vòng lặp
- tăng chỉ số thêm 1
- nếu num1 [chỉ mục] không giống với num [chỉ mục]
- nối các số có trong num và biến nó thành số nguyên
- trả về kết quả.
Ví dụ (Python)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
class Solution: def maximumSwap(self, num): num = list(map(int,list(str(num)))) num1 = sorted(num,reverse=True) index=0 while index<len(num): if num1[index]!=num[index]: a = num[index+1:] a.reverse() a=len(a) - a.index(num1[index])+index+1 -1 num[index],num[a] = num[a],num[index] break index+=1 return int("".join(str(x) for x in num)) ob1 = Solution() print(ob1.maximumSwap(5397))
Đầu vào
5397
Đầu ra
9357