숫자 n이 있다고 가정하고 모든 숫자가 감소하지 않는 n보다 작거나 같은 가장 큰 숫자를 찾아야 합니다.
따라서 입력이 n =221과 같으면 출력은 199가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- digits :=n의 모든 숫자가 포함된 목록
- 바운드:=null
- 숫자 범위 크기의 i에 대해 - 1에서 0까지, 수행
- 숫자[i] <숫자[i - 1]이면
- 바운드 :=나
- 숫자[i - 1] :=숫자[i - 1] - 1
- bound가 null이 아니면
- 숫자 크기에 묶인 범위의 i에 대해
- 숫자[i] :=9
- 숫자 크기에 묶인 범위의 i에 대해
- 숫자[i] <숫자[i - 1]이면
- 각 숫자를 숫자로 결합하여 숫자를 만들고 반환
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시 코드
class Solution:
def solve(self, n):
digits = [int(x) for x in str(n)]
bound = None
for i in range(len(digits) - 1, 0, -1):
if digits[i] < digits[i - 1]:
bound = i
digits[i - 1] -= 1
if bound:
for i in range(bound, len(digits)):
digits[i] = 9
return int("".join(map(str, digits)))
ob = Solution()
n = 221
print(ob.solve(n)) 입력
221
출력
199