嗯~雖然它本來不是給我這樣用的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小時解一題,我看我還是喝西北風好了哈哈哈哈哈哈.........
沒有留言:
張貼留言