파이썬에서 목록을 링크 : 그것은 회문 인 경우 단일 연결 목록을 감안할 때회문 O (1) 추가 공간이는 # 234 Leetcode 문제입니다
, 결정한다.
후속 조치 : O (n) 시간 및 O (1) 간격으로 수행 할 수 있습니까?
이 문제는 O (n) 공간으로 해결하기 쉽습니다. 그러나 O (1) 솔루션을 이해할 수는 없습니다. 내가 생각할 수있는 유일한 방법은 재귀를 사용하는 것입니다
이 작은 샘플 작동하지만 (최대 재귀 깊이가사람은 O를 사용하여 솔루션을 제공 할 수 있습니다 초과
제공
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): current = None def isPalindrome(self, head): """ :type head: ListNode :rtype: bool """ if not head or not head.next: return True self.current = head return self.compare(head) def compare(self, head): if not head: return True if not self.compare(head.next): return False if head.val != self.current.val: return False else: self.current = self.current.next return True
1) 공간? 고맙습니다. 당신은 장소에 목록을 수정하도록 허용하는 경우
재귀 또한 O (n) 공간을 사용합니다. 이 공간은 암시 적으로 스택에 할당되므로 더 숨겨집니다. –
재귀가 일정한 공간을 사용했다면, 공간이 부족하지 않을 것입니다. – molbdnilo
@SvenMarnach 당신은 더 자세한 설명을 할 수 있습니까? 암시 적 할당의 원인은 무엇입니까? – GilbertLee