2018年2月8日 星期四

[73] Set Matrix Zeroes

給一個矩陣,
零的item必須把它的行跟列全部都設成0
存回原本的矩陣回傳
被改成0的部分不適用"行跟列全部都設成0"的規則
也就是說改成0的規則不必生生不息的往下傳遞這樣.
感覺不是一個好的解法,
但執行時間好像沒有慢到哪裡去啊(?)
那就這樣好了哈哈哈哈哈(顯示為忽略題意上的space問題)

void setZeroes(int** matrix, int matrixRowSize, int matrixColSize) {
    int r = 0;
    int c = 0;
    int Rarray[matrixRowSize];
    int RCount=0;
    int Carray[matrixColSize];
    int CCount=0;

    int i,k;
    for(r=0;r<matrixRowSize; r++)
    {
        for (c=0;c<matrixColSize;c++)
        {
            if (matrix[r][c]==0)
            {
                Rarray[RCount++] = r;  
                break;
            }  
        }  
    }

    for (c=0;c<matrixColSize;c++)
    {
        for(r=0;r<matrixRowSize; r++)
        {
            if (matrix[r][c]==0)
            {
                Carray[CCount++] = c;
                break;
            }      
        }  
    }

    for(k=0;k<RCount;k++)
        for (i=0;i<matrixColSize;i++)
            matrix[Rarray[k]][i] = 0;
    for(k=0;k<CCount;k++)
        for (i=0;i<matrixRowSize;i++)
            matrix[i][Carray[k]] = 0;
}
據說可以在讀到零的時候把該row和該column的第一個設成0
也就是和我拿Carray 和Rarray來存一樣意思,
但是不需要另外的space, 而是用原本的matrix空間
hmm~ brilliant.

沒有留言:

張貼留言