슬 래 그 를 배 워 서 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;
}
*/

좋은 웹페이지 즐겨찾기