python螺旋数字矩阵

python螺旋数字矩阵

给出数字个数n (0<n ≤999)和行数m (0<m ≤ 999)。从左上角的1开始,按照顺时针螺旋向内写方式,输出1-n,依次写出2,3.….,最终形成一个m行的矩阵。
1.每行数字的个数一样多
2.列的数量尽可能少
3.填充数字时优先填充外部
4.数字不够时,使用单个*号占位

def getRes(n, m):
    num_size = n
    rows = m

    cols, _ = divmod(n, m)
    cols = cols + 1 if _ else cols # 列数

    res = [['*'] * cols for _ in range(rows)]  # 初始化m行的矩阵
    i, j = 0, 0
    directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]  # 四个方向依次为:右,下,左,上
    direction_index = 0 # 表示当前走的方向,随i和j的变化而变化
    for num in range(num_size):
        number = num + 1
        res[i][j] = str(number)  # 为了后面拼接字符串,所以转str
        nxt_i, nxt_j = directions[direction_index][0] + i, directions[direction_index][1] + j  # 按照当前方向时,下一个坐标位置
        if not (0 <= nxt_i < rows and 0 <= nxt_j < cols and res[nxt_i][nxt_j] == '*'):# 表示走的方向的改变。当下一个坐标位置出了边界时,或者未到边界但是下一个位置的值不是*,也就是已被填充时,改变方向
            direction_index = (direction_index + 1) % 4
        i, j = i + directions[direction_index][0], j + directions[direction_index][1]
    for values in res:
        print('\t'.join(values))


getRes(9, 4)

n=9,m=4

n=17,m=6

n=55,m=9

相关推荐

  1. 华为OD机试-螺旋数字矩阵

    2024-03-11 00:30:02       38 阅读
  2. OD C卷 - 螺旋数组矩阵

    2024-03-11 00:30:02       43 阅读
  3. 1130. 【二维数组】打印螺旋矩阵

    2024-03-11 00:30:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 00:30:02       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 00:30:02       107 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 00:30:02       90 阅读
  4. Python语言-面向对象

    2024-03-11 00:30:02       98 阅读

热门阅读

  1. 【LeetCode周赛】第388场周赛

    2024-03-11 00:30:02       41 阅读
  2. spring常见面试题

    2024-03-11 00:30:02       44 阅读
  3. MacOS安装反编译工具JD-GUI 版本需要1.8+

    2024-03-11 00:30:02       36 阅读