음수가 아닌 정수가 있다고 가정합니다. 최대 값을 얻기 위해 최대 한 번 두 자리 숫자를 바꿀 수 있습니다. 얻을 수 있는 최대 값을 반환해야 합니다. 따라서 입력이 2736과 같으면 출력은 7236이 됩니다. 그래서 여기에서 2와 7을 교환합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- num :=숫자에서 각 숫자를 잘라내어 목록을 만듭니다.
- num1 :=역순으로 숫자 정렬
- 색인:=0
- while 인덱스
- num1[index]가 num[index]
- 과 같지 않은 경우
- a :=인덱스(색인 + 1)에서 끝까지 num의 하위 배열
- 뒤집기
- a :=a의 길이 - 인덱스 num[index]의 a + 인덱스 + 1 - 1
- 숫자[인덱스], 숫자[a] :=숫자[a], 숫자[인덱스]
- 루프를 끊다
- 색인 1 증가
- num1[index]가 num[index]
예제(파이썬)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
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))
입력
5397
출력
9357