文章目录
290. 单词规律
用哈希表一一对应就行
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
dic={}
st=set()
if len(pattern)!=len(s.split(" ")):
return False
for word1,word2 in zip(pattern,s.split(" ")):
if word1 not in dic.keys():
if word2 in st:
return False
st.add(word2)
dic[word1]=word2
else:
if not dic[word1]==word2:
return False
return True
279. 完全平方数
可以用动态规划,dp[i]存储i对应的最少的数目
我直接用递归,然后记忆化存储了
@cache 是真好用啊
class Solution:
def numSquares(self, n: int) -> int:
return dfs(n)
@cache
def dfs(n):
if n==0:
return 0
if n==1:
return 1
if n==2:
return 2
if n==3:
return 3
l=int(math.sqrt(n))
if l*l==n:
return 1
j=1
mins=99999
while(j*j<=n):
mins=min(mins,dfs(n-j*j)+1)
j+=1
print(f"dfs({n}):{mins}")
return mins
328. 奇偶链表
通过注释 给每个节点严格的意义
就很好写了 目前链表题都小菜一碟hhhh
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def oddEvenList(self, head: Optional[ListNode]) -> Optional[ListNode]:
dump1=ListNode(-1) # 用来连接奇数链
dump2=ListNode(-2) # 用来连接偶数链
p1=dump1 #指向奇数链最后一个节点
p2=dump2 #指向偶数链最后一个节点
p=head # p指向当前这个节点
n=1 # 表明前这个节点的序号
while(p!=None):
if n%2==1:
p1.next=p # 连接到奇数链上
p1=p1.next # p1 指向奇数链最后一个节点
else:
p2.next=p # 连接到偶数链上
p2=p2.next # p2 指向偶数链最后一个节点
n+=1
p=p.next # p指向下个节点
p1.next=dump2.next
p2.next=None
return dump1.next
347. 前 K 个高频元素
对元组一排序就ok
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dic=Counter(nums)
ls=dic.items()
def who(x1,x2):
if x1[1]<=x2[1]:
return 1
else:
return -1
ls=sorted(ls,key=cmp_to_key(who))
return [t[0] for t in ls][:k]