1. 程式人生 > 實用技巧 >演算法題---順時針列印陣列

演算法題---順時針列印陣列

思路

1. 一圈圈的列印,開始點為左上角(0,0)

  1. 第一圈:(0,0)

  2. 第二圈:(1,1)

  3. 第N圈:(n,n)

2. 總共可以列印多少圈,n為行與列的一半,超出就終止

python實現

def print_one_circle(array_input, rows, cols, start):
    ret = []
    if len(array_input) == 0:
        return ret

    # 列數
    end_x = cols - 1 - start
    # 行數
    end_y = rows - 1 - start
    
# 從左往右列印 for i in range(start, end_x+1): ret.append(array_input[start][i]) # 從上往下列印 if start < end_y: for i in range(start+1, end_y+1): ret.append(array_input[i][end_x]) # 從右往左列印 if start < end_y and start < end_x: for i in range(end_x - 1, start-1, -1): ret.append(array_input[end_y][i])
# 從下往上列印 if start < end_y - 1 and start < end_x: for i in range(end_y - 1, start, -1): ret.append(array_input[i][start]) return ret def print_matrix(array_input): ret = [] if len(array_input) == 0: return ret rows = len(array_input) cols = len(array_input[0]) start
= 0 while rows > 2*start and cols > 2*start: tmp = print_one_circle(array_input, rows, cols, start) ret += tmp start += 1 return ret if __name__ == "__main__": array_input = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] print(print_matrix(array_input))