Zero Matrix

# 問題

二次元配列Xが与えられる.ここでX[i][j] == 0ならばi行目全体とj列目全体を0にしたい.

1
2
3
1 2 3    1 2 0
4 5 0 -> 0 0 0
7 8 9    7 8 0

何も考えずに左上から右下に向かって走査しながら0を見つけ次第その行と列を0にするってやっていくと,行列全体が0になってかなしい気持ちになる.

# 落ち着いて真面目にやる

走査と0埋めを別個にやれば全部0にはならない.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def set_zeros(table):
    ROW = len(table)
    COL = len(table[0])
    row_with_zero = [False for _ in range(ROW)]
    col_with_zero = [False for _ in range(COL)]

    for r in range(ROW):
        for c in range(COL):
            if table[r][c] == 0:
                row_with_zero[r] = True
                col_with_zero[c] = True

    for r in range(ROW):
        if row_with_zero[r]:
            for c in range(COL):
                table[r][c] = 0

    for c in range(COL):
        if col_with_zero[c]:
            for r in range(ROW):
                table[r][c] = 0

    return table
Hugo で構築されています。
テーマ StackJimmy によって設計されています。