<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">19 </span>
<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">Given a linked list, remove the nth node from the end of list and return its head.</span>
For example,
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
这个问题本身简单的。但要在一次遍历中实现解决这个问题,需要点不一样的方法。解决思路挺有意思的。
设置两个指针,第一个指针先走n步,然后第二个指针开始走。即两个指针保持n步的间隔。
当第一个指针到末尾时,第二个指针就指向倒数第n个节点。
20
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid. The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
stack = []
for i in s:
if i in ['(', '[', '{']:
stack.append(i)
continue
if len(stack):
if i == ')' and stack[-1] == '(' or \
i == ']' and stack[-1] == '[' or \
i == '}' and stack[-1] == '{':
stack.pop()
else:
return False
else:
return False
if len(stack) == 0:
return True
else:
return False
做20题的时候遇到一个奇怪的问题,在本地IDE pycharm上写代码的时候,我是这么写的
if i is ')' and stack[-1] is '(' or \
i is ']' and stack[-1] is '[' or \
i is '}' and stack[-1] is '{':
stack.pop()
本地run的时候没错,但是leetcode线上run的时候某些input 出错,比如"()"。
后来把 is 改为 == 判断 就没错了。
== 比的是 对象的value, is 比的是 两个对象是否同一个对象,在内存里的id是否一样。
但是 这里要比较的对象是 ‘()[]{}’这样的常数,应该指向相同的内存。
leetcode 上跑出错误,可能那里分配内存的机制有些不同???
所以, 平常比 value直接用 ==。