2018年1月27日 星期六

[48] 好的開始?!Rotate Image

嗯~雖然它本來不是給我這樣用的XD
但是估且用之吧XD
今天的題目是Rotate Image
沒有要追求最佳解
所以認真魔人不要砲我XD
純粹方便記錄, The End.

Rotate Image:矩陣轉90度,不能直接alloc一個全新的塞進去(可惡XD!)

一開始的想法是這樣(哪樣 XD),沒想到index完全大錯亂 囧
最後花了一整天才寫好 = =+
雖然中間有去吃飯鬼混抱怨咖啡店的隔壁桌太吵之類的  XD

從最外圈往裡面一層一層轉進去, 每次需要搬四個item,它們會形成A要搬去B,B要搬去C, C要搬去 D, D要搬去A的迴路,最難的大概是找每個對應item的index (其實是因為我太廢了屋屋屋)
花了我一天精神時光屋, 明明用講的都很簡單, 哭

void rotate(int** matrix, int matrixRowSize, int *matrixColSizes) {
    int i,j,tmp,range;
    range = matrixRowSize;
    for(i=0; i<matrixRowSize/2; i++)
    {
        range = matrixRowSize-2*i;
        for(j=i;j<i+range-1;j++)
        {
            tmp = matrix[i][j];
            matrix[i][j] = matrix[matrixRowSize-j-1][i];
            matrix[matrixRowSize-j-1][i] = matrix[matrixRowSize - i -1][matrixRowSize-j-1];
            matrix[matrixRowSize - i -1][matrixRowSize-j-1] =matrix[j][matrixRowSize - i -1];
            matrix[j][matrixRowSize - i -1] = tmp;
        }
    }
}

中間一度崩潰有去偷看了一下別人的解法
說可以先反轉再swap, 為什麼可以想到這種兩步偷吃步的方法呢為什麼!
但是不得不說知道IDEA 之後就沒什麼難度了,
大概幾分鐘就KO掉了 QQ
(最難的就是那個IDEA啊啊啊啊啊啊~~~~~抱頭)

void swap(int *a , int *b)
{
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

void rotate(int** matrix, int matrixRowSize, int *matrixColSizes)
{
    int i , j , tmp;
    for (i = 0; i<matrixRowSize/2 ; i++)
    {
        for(j=0; j<matrixRowSize; j++)
        {
            swap(&matrix[i][j], &matrix[matrixRowSize-i-1][j]);
        }
     
    }
 
    for (i = 0; i<matrixRowSize ; i++)
    {
        for(j=i;j<matrixRowSize;j++)
                swap(&matrix[i][j],&matrix[j][i]);      
    }
}

但總而言之第一天開始LeetCode, 至少有解出來 (要被各方大神笑死了屋屋屋)
用24小時解一題,我看我還是喝西北風好了哈哈哈哈哈哈.........

沒有留言:

張貼留言