剑指offer刷题记录|顺序刷题第三周
剑指offer 20 表示数值的字符串
class Solution: def isNumber(self, s: str) -> bool: # 有限状态机,短时间内根本写不出来 # python直接float 虽然面试0分 try: float(s) except: return False return True
剑指offer 24 反转链表
class Solution: def reverseList(self, head: ListNode) -> ListNode: # 双指针法,有点难理解,还是看解释吧QAQ。反正结果是从后往前构造的,不断地添加前面结点 cur, pre = head, None while cur: tmp = cur.next cur.next = pre pre = cur cur = tmp return pre
剑指offer 22 链表中倒数第k个节点
class Solution: def getKthFromEnd(self, head: ListNode, k: int) -> ListNode: # 法一:确定返回的列表和原列表中间距离即可得到结果,这个距离是len-k res=[] pre = head while head.next: res.append(head.val) head = head.next res.append(head.val) skip = len(res) - k while skip: pre = pre.next skip -= 1 return pre # 法二:双指针,第一个指针先走k步,然后一起走到终点,没走完的那个还剩k步,就是结果 # 这样就不用统计链条长度len,非常节省时间 p, q = head, head while k: p = p.next k -= 1 while p: p = p.next q = q.next return q
剑指offer 28 对称的二叉树
class Solution: def isSymmetric(self, root: TreeNode) -> bool: def is_abba(L, R): # 递归结束条件1,两个节点都为null 则 True if not L and not R: return True # 递归结束条件2,一个null一个不null 或者 val不同 则 False if not L or not R or L.val!=R.val: return False # 递归分两种,一个False则 return False,所以是and return is_abba(L.left, R.right) and is_abba(L.right, R.left) # 对称二叉树,左右结点需要满足三个条件:L.val == R.val & L.left == R.right & L.right == R.left return is_abba(root.left, root.right) if root else True
剑指offer 21 调整数组顺序,奇数在偶数前面
class Solution: def exchange(self, nums: List[int]) -> List[int]: # 双指针, 奇数往前放,偶数往后放。只需要一遍,不过空间复杂度很高。 left, right = 0, len(nums)-1 res = [-1]*len(nums) for ele in nums: if ele % 2 == 1: res[left] = ele left += 1 else: res[right] = ele right -= 1 return res
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
ROS快捷操作键和话题记录与复现