주어진 행렬에서 요소가 0 이면 해당 행과 열의 모든 요소를 0 으로 설정합니다 . 내부 알고리즘을 사용하십시오 .m x n
예시 1:
입력: 행렬 = [[1,1,1],[1,0,1],[1,1,1]] 출력: [[1,0,1],[0,0,0],[1 ,0,1]]
예 2:
입력: 행렬 = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 출력: [[0,0,0,0],[0 ,4,5,0],[0,3,1,0]]
힌트:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
고급의:
- 직관적인 해결책은 추가 공간을 사용하는 것이지만 이는 좋은 해결책이 아닙니다.
O(mn)
- 간단한 개선은 추가 공간을 사용하는 것이지만 이것이 여전히 최선의 해결책은 아닙니다.
O(m + n)
- 일정한 공간만을 사용하여 솔루션을 생각해 낼 수 있습니까?
def setZeroes(matrix):
m, n = len(matrix), len(matrix[0]) # 获取矩阵的行数m和列数n
rows, cols = set(), set() # 初始化两个集合,用于存放需要置零的行和列的索引
for i in range(m):
for j in range(n): # 使用两个嵌套循环遍历矩阵中的每个元素
if matrix[i][j] == 0: # 如果当前元素为0
rows.add(i) # 将当前元素的行索引添加到rows集合中
cols.add(j) # 将当前元素的列索引添加到cols集合中
for i in rows: # 对于需要置零的每一行
matrix[i] = [0] * n # 使用列表乘法设置整行为0
for j in cols: # 对于需要置零的每一列
for i in range(m): # 使用循环遍历每一行
matrix[i][j] = 0 # 将对应的元素置为0
물론입니다. 위의 코드를 한 줄씩 설명하겠습니다.
python코드 복사
def setZeroes(matrix):
이름이 지정된 함수는 setZeroes
매개변수로 정의됩니다 matrix
.
python코드 복사
m, n = len(matrix), len(matrix[0])
행렬의 행 m
과 열 수를 가져옵니다 n
.
python코드 복사
rows, cols = set(), set()
0으로 설정해야 하는 행 및 열 인덱스를 저장하기 위해 두 개의 컬렉션 rows
합계를 초기화합니다.cols
python코드 복사
for i in range(m): for j in range(n):
두 개의 중첩 루프를 사용하여 행렬의 각 요소를 반복합니다.
python코드 복사
if matrix[i][j] == 0:
현재 요소가 0인지 확인하십시오.
python코드 복사
rows.add(i) cols.add(j)
현재 요소가 0이면 현재 요소의 행 인덱스가 컬렉션 i
에 추가되고 열 인덱스가 컬렉션 에 추가됩니다 .rows
j
cols
python코드 복사
for i in rows: matrix[i] = [0] * n
rows
컬렉션의 각 인덱스 에 대해 i
해당 행을 모두 0으로 설정합니다. 여기서는 Python 목록의 곱셈 기능이 사용됩니다.
python코드 복사
for j in cols: for i in range(m):
cols
컬렉션의 각 인덱스 에 대해 j
중첩 루프를 사용하여 각 행을 반복합니다.
python코드 복사
matrix[i][j] = 0
열 인덱스가 있는 요소를 j
0으로 설정합니다.
위의 코드는 한 줄씩 설명되어 있습니다. 즉, 이 코드는 먼저 어떤 행과 열을 0으로 설정해야 하는지 결정한 다음 실제로 0으로 설정을 수행합니다.