給出方陣的長寬,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月底了,也不知道國慶前能不能跑掉,生理性討厭了