两道题都不怎么难……下一道题太长了,明天再说吧
378. Kth Smallest Element in a Sorted Matrix
这道题其实和373. Find K Pairs with Smallest Sums基本一样,虽然题目不一样,但是解题的方式一样。
给定一个matrix,其中他的行和列都是从小到大排列,求第k个小的数。
代码如下:
from heapq import heappush, heappop
class Solution(object):
def kthSmallest(self, matrix, k):
"""
:type matrix: List[List[int]]
:type k: int
:rtype: int
"""
if k == 0 or not matrix or not matrix[0]:
return
m, n, seen = len(matrix), len(matrix[0]), set()
h = [(matrix[0][0], (0, 0))]
for _ in range(min(k, m*n)):
val, (i, j) = heappop(h)
res = val
if i+1<m and (i+1, j) not in seen:
heappush(h, (matrix[i+1][j], (i+1, j)))
seen.add((i+1, j))
if j+1<n and (i, j+1) not in seen:
heappush(h, (matrix[i][j+1], (i, j+1)))
seen.add((i, j+1))
return res
386. Lexicographical Numbers
将小于n的数字按照字典顺序排序,原来是19 要大于 8的,现在的话19要排在前面,因为第一位是1。
其实偷懒的话直接转化为字符然后进行排序就可以了,一行代码就够了。
当然正确做法应该也差不多。
代码如下:
class Solution(object):
def lexicalOrder(self, n):
"""
:type n: int
:rtype: List[int]
"""
return list(map(int, sorted(list(map(str, range(1, n+1))))))