问题一:
思路:遍历两个链表,将每个最小的节点插入新的链表,最后返回新链表
代码:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# write code here
head = ListNode(None)
tmp = head
while pHead1 and pHead2:
if pHead1.val >= pHead2.val:
head.next = ListNode(pHead2.val)
head = head.next
pHead2 = pHead2.next
else:
head.next = ListNode(pHead1.val)
head = head.next
pHead1 = pHead1.next
if pHead1:
head.next = pHead1
if pHead2:
head.next = pHead2
return tmp.next
问题二:
思路:递归调用
代码:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
# write code here
def is_subtree(a, b):
if not b:
return True
if not a or a.val != b.val:
return False
return is_subtree(a.left,b.left) and is_subtree(a.right, b.right)
if not pRoot1 or not pRoot2:
return False
return is_subtree(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
问题三:
思路:当前数字小于后面的数字,减去该数字;当前数字大于后面的数字,加上该数字;当前数字是最后一个数字,加上该数字。
代码:
class Solution:
def romanToInt(self, s: str) -> int:
roman_dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
res = 0
for i in range(len(s)):
if i+1 == len(s) or roman_dict[s[i]] >= roman_dict[s[i+1]]:
res += roman_dict[s[i]]
else:
res -= roman_dict[s[i]]
return res
问题四:
思路:所有字符串组成一个行长度不等的矩阵,按列遍历每一行,直到出现不相等的行。
代码:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ''
min_str = min(strs, key=lambda x: len(x))
min_str_len = len(min_str)
res = ''
flag = True
for i in range(min_str_len):
for str in strs:
if str[i] == min_str[i]:
continue
else:
flag = False
break
if flag:
res += min_str[i]
else:
break
return res