1. 顺时针打印矩阵
class Solution:
def printMatrix(self , matrix: List[List[int]]) -> List[int]:
# write code here
# 观察规律,可以发现每次需要加紧result数组的matrix元素的(index_1,index_2)分别是有规律的,可以参考图
n, m = len(matrix), len(matrix[0])
total = n*m
n = n - 1
index_1, index_2, sign = 0, 0, 1
res = []
while len(res) != total:
for l in range(m):
res.append(matrix[index_1][index_2])
index_2 += 1*sign
index_2 -= 1*sign
for r in range(n):
index_1 += 1*sign
res.append(matrix[index_1][index_2])
sign *= -1
m -= 1
n -= 1
index_2 += 1*sign
return res
# 更厉害的解法,每次取第一行,然后把剩下的矩阵逆时针旋转90度继续操作
# matrix类型为二维列表,需要返回列表
res = [] #定义一个顺序列表
while matrix:
res += matrix.pop(0) #每次去除矩阵最上面一行的数据,并添加到顺序列表中
matrix = list(zip(*matrix))[::-1] #紧接着逆时针90°旋转矩阵,重复前面的步骤直到矩阵为空
return res
2.扑克牌顺子
class Solution:
def IsContinuous(self , numbers: List[int]) -> bool:
# write code here
# 很简单的解法,首先排序数组,然后数出0的个数
# 然后看后面非0的数组中间需要补几个位
# 其中,一旦出现两个相同的元素,可直接返回false,因为顺子肯定没有重复
# 如果需要补的位大于现有0的个数,那就补不了,就输出false
numbers = sorted(numbers)
count_0 = numbers.count(0)
temp = 0
for i in range(count_0,len(numbers)-1):
if numbers[i+1] == numbers[i]:
return False
temp += numbers[i+1] - numbers[i] -1
if temp > count_0:
return False
return True