给出方阵的长宽,n 和 m ,按照斜着的蛇形输出该方阵
面试官给的送分题裸模拟,写的太慢了没过,实际确实慢,结束后起码用了一个多小时才调完
找了下没找到leetcode 提交的地方,各种oj 倒是有,不过是 n * n 的
先把代码存这里吧
输出:
=================================1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
=================================1 2 6 7 3 5 8 11 4 9 10 12
=================================1 2 6 3 5 7 4 8 11 9 10 12
=================================1
=================================1 2 5 6 9 10 13 3 4 7 8 11 12 14
没啥可说的,纯模拟,就是没写过第一眼见到觉得很麻烦,要搞清楚实际上就是四种方向 右,下,左下,右上,四种操作,对 i 和 j 操作,暴力点写法边输出边看看哪儿越界了。
其实就是需要时间去观察 i 和 j 在边界什么情况右移动,下移动,以及上三角矩阵和下三角矩阵情况不同需要 if 判断。只能说输的服气,确实用太长时间了,但是讲道理也挺讨厌这种短时间编码的模拟题的。虽然可能确实比dp搞算法友好点把。难评
def snake_matrix(n, m):matrix = [[0 for _ in range(m)] for _ in range(n)]num = n * mcnt = 0i = 0j = 0def print_and_count(i, j):nonlocal cntcnt += 1if cnt > num:return Falsematrix[i][j] = cntreturn Truedef print_m():print("=" * 33)for i in range(n):for j in range(m):print(f" {matrix[i][j]: ^3}", end="")print("")print_and_count(i, j) while cnt < num:# right and printif j == m - 1:i += 1else:j += 1if not print_and_count(i, j):breakwhile i != n - 1 and j != 0:i += 1; j -= 1if not print_and_count(i, j):break# down and printif i == n - 1:j += 1else:i += 1if not print_and_count(i, j):breakwhile j != m - 1 and i != 0:i -= 1; j += 1if not print_and_count(i, j):breakprint_m()if __name__ == "__main__":snake_matrix(4, 4)snake_matrix(3, 4)snake_matrix(4, 3)snake_matrix(1, 1)snake_matrix(2, 7)
挺难受的,都8月底了,也不知道国庆前能不能跑掉,生理性讨厌了