슬 래 그 를 배 워 서 Leetcode 0073 매트릭스 0 을 닦 아 드 리 겠 습 니 다.
하 나 를 정 하 다 m x n 의 행렬 은 하나의 요소 가 0 이면 줄 과 열 에 있 는 모든 요 소 를 0 으로 설정 합 니 다.제자리 알고리즘 을 사용 하 세 요.
예시 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] 진급:
직접적인 해결 방안 은 사용 하 는 것 이다. O(mn) 추가 공간 이지 만 좋 은 해결 방안 은 아니다.간단 한 개선 방안 은 O (m) 를 사용 하 는 것 입 니 다. + n) 의 추가 공간 이지 만 이것 은 여전히 가장 좋 은 해결 방안 이 아니다.너 는 상수 공간의 해결 방안 을 생각해 낼 수 있 니?
출처: 스냅 백 (LeetCode) 링크:https://leetcode-cn.com/problems/set-matrix-zeroes 저작권 은 인터넷 에 귀속 된다.상업 전 재 는 정부 에 연락 하여 권한 을 부여 해 주 십시오. 비 상업 전 재 는 출처 를 밝 혀 주 십시오.
백화 제목:
알고리즘:
상세 설명 관심 B 역 [C 언어 전체 코드] 슬 래 그 배 워 서 Leetcode 안 잃 어 버 려. https://www.bilibili.com/video/BV1C7411y7gB
C 언어 완전 코드
// :
//1, matrix[m][n]==0 matrix[0][n]=matrix[m][0]=0
//2, , 0
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
int i = 0;
int j = 0;
int iRow = matrixSize;
int iCol = matrixColSize[0];
int iRFlag = 0;
int iCFlag = 0;
// matrix[m][n]==0 matrix[0][n]=matrix[m][0]=0
for (i = 0; i < iRow; i++)
{
for (j = 0; j < iCol; j++)
{
if (matrix[i][j] == 0)
{
matrix[0][j] = 0;
matrix[i][0] = 0;
if (i == 0)
{
iRFlag = 1;
}
if (j == 0)
{
iCFlag = 1;
}
}
}
}
// , 0
for (i = 1; i < iRow; i++)
{
for (j = 1; j < iCol; j++)
{
if (matrix[i][0] == 0)
{
matrix[i][j] = 0;
}
if (matrix[0][j] == 0)
{
matrix[i][j] = 0;
}
}
}
// 0
if (iRFlag)
{
for (j = 0; j < iCol; j++)
{
matrix[0][j] = 0;
}
}
// 0
if (iCFlag)
{
for (i = 0; i < iRow; i++)
{
matrix[i][0] = 0;
}
}
return;
}
/*
// :
//1, row[] 0,col[] 0
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
int i = 0;
int j = 0;
int iRow = matrixSize;
int iCol = matrixColSize[0];
int row[iRow];
int col[iCol];
memset(row, 0x00, sizeof(int) * iRow);
memset(col, 0x00, sizeof(int) * iCol);
//1, , 0 , ,
for (i = 0; i < iRow; i++)
{
for (j = 0; j < iCol; j++)
{
if (matrix[i][j] == 0)
{
row[i] = 1;
col[j] = 1;
}
}
}
//2, , ,
for (i = 0; i < iRow; i++)
{
for (j = 0; j < iCol; j++)
{
if (row[i] == 1)
{
matrix[i][j] = 0;
}
if (col[j] == 1)
{
matrix[i][j] = 0;
}
}
}
return;
}
*/