Python代码如下↓
class Solution:
def kthSmallest(self, mat: List[List[int]], k: int) -> int:
# mat:m*n
m=len(mat)
n=len(mat[0])
# 初始化Best_pointer
Best_pointer=[0]*m
if k==1:
return self.Calculate(mat,Best_pointer)
Candidate_pointers=[]
Hash={}
for _ in range(1,k):
# 根据Best_pointer,向Candidate_pointers中加入New_pointer
for i in range(m):
if Best_pointer[i]<n-1:
New_pointer=Best_pointer.copy()
New_pointer[i]+=1
# 利用散列表判断有无重复
if tuple(New_pointer) in Hash:
continue
else:
Hash[tuple(New_pointer)]=1
Candidate_pointers.append(New_pointer)
minimum=+inf
# 依次遍历Candidate_pointers,选出Best_pointer
for Candidate_pointer in Candidate_pointers:
C=self.Calculate(mat,Candidate_pointer)
if C<minimum:
minimum=C
Best_pointer=Candidate_pointer
# 移除Best_pointer
Candidate_pointers.remove(Best_pointer)
return minimum
# 根据pointer计算对应的值
def Calculate(self,mat,pointer):
t=0
for i in range(len(mat)):
t+=mat[i][pointer[i]]
return t