564. 가장 가까운 회문 찾기
난이도:어려움
주제:수학, 문자열
정수를 나타내는 문자열 n이 주어지면 _가장 가까운 정수(자신을 포함하지 않음)를 반환합니다. 이는 회문입니다. 넥타이가 있으면더 작은 것을 돌려주세요.
가장 가까운 것은 두 정수 사이의 절대 차이가 최소화된 것으로 정의됩니다.
예 1:
예 2:
- 입력:n = "1"
- 출력:"0"
- 설명:0과 2는 가장 가까운 회문이지만 가장 작은 것인 0을 반환합니다.
제약조건:
- 1 <= n.길이 <= 18
- n은 숫자로만 구성됩니다.
- n에는 앞에 0이 없습니다.
- n은 [1, 1018- 1] 범위의 정수를 나타냅니다.
힌트:
- 이 문제에 무차별 대입이 효과가 있습니까? 다른 것을 생각해 보세요.
- 1234, 999,1000 등과 같은 몇 가지 예를 들어 가장 가까운 회문을 확인하세요. 얼마나 많은 경우가 가능할까요?
- 문자열의 왼쪽 절반, 오른쪽 절반만 고려해야 하나요? 아니면 둘 다 고려해야 하나요?
- 12932, 99800, 12120이라는 숫자 중 가장 가까운 회문을 찾아보세요. 뭔가 관찰하셨나요?
해결책:
잠재적인 회문 후보를 생성한 다음 입력 숫자에 가장 가까운 것을 선택하는 함수를 만드는 데 집중하겠습니다.
솔루션 접근 방식:
회문 후보자 식별:
- 숫자의 전반부를 미러링하여 회문을 만듭니다.
- 모든 숫자가 9, 100...001 또는 99...99인 극단적인 경우를 고려하세요.
- 숫자의 중간을 1씩 위나 아래로 수정하여 회문을 생성합니다.
가장 가까운 회문 계산:
- 각 회문 후보에 대해 원래 숫자와의 절대 차이를 계산합니다.
- 차이가 가장 작은 회문을 반환합니다. 동점이면 더 작은 회문을 돌려주세요
이 솔루션을 PHP로 구현해 보겠습니다:564. 가장 가까운 회문 찾기
으아악
설명:
- generatePalindrome($firstHalf, $isOddLength):
- 이 도우미 기능은 숫자의 전반부를 미러링하여 회문을 만듭니다.
으아악
엣지 케이스:
- 100...001 또는 99...99와 같은 숫자에서 생성된 회문은 이러한 경우를 명시적으로 확인하여 처리됩니다.
메인 로직:
- 우리는 가능한 회문을 계산한 다음 절대 차이를 비교하여 가장 가까운 회문을 찾습니다.
이 솔루션은 가능한 회문 후보를 효율적으로 좁히고 몇 가지 옵션만 고려하여 가장 가까운 것을 선택하므로 무차별 접근 방식보다 훨씬 빠릅니다.
연락처 링크
이 시리즈가 도움이 되었다면 GitHub에서저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 당신의 지원은 나에게 큰 의미가 될 것입니다!
이렇게 더 유용한 콘텐츠를 원하시면 저를 팔로우해주세요:
위 내용은 . 가장 가까운 회문 찾기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!