之前找工作的時候去頭條碰碰運氣,然後結果一面就慘敗回家。不得不說頭條的面試很有分量。一面小哥開場看了一下我的簡歷,然後直接就說那你做個題吧。然後現場寫了個回形數組,讓我寫個算法遍歷下。說實話本人算法 真的很水。也沒有 刻意去研究過。所以當場就涼涼,盡然給面試官很猥瑣的說,我能不能給你用快排排個序輸出不就有序了。然後面試官笑而不語搖搖頭。當時緊張加上思維混亂,總覺得用for循環加上遞歸能實現,但是苦於找不到遞歸出口。回來後研究了許久也沒研究明白這破玩意怎麼輸出。今天咬咬牙把這個坑填了。查了一些資料發現好多大佬都寫了具體實現。那我也不班門弄斧了。直接貼代碼上來吧。
先看看什麼是回形數組(誰想出來這麼個缺德玩意的......)
然後用二維數組弄一個這玩意。題目就是這個
int attrs[][] = {
{0 ,1 ,2 ,3 },
{11,12,13,4 },
{10,15,14,5 },
{9 ,8 ,7 ,6 },
};
給定一個n階數的回形數組,用代碼遍歷然後 有序輸出
public static void output(int attrs[][]) {
int count = row*col;
int i = 0;
int j = 0;
while(count>0) {
//輸出上面的邊
for(int k=1;k<col;k++) {
System.out.print(attrs[i][j]+" ");
count -=1;
j++;
}
//輸出右邊的邊
for(int k=1;k<row;k++) {
System.out.print(attrs[i][j]+" ");
count -=1;
i++;
}
//輸出下面的邊
for(int k=1;k<col;k++) {
System.out.print(attrs[i][j]+" ");
count -=1;
j--;
}
//輸出左面的邊
for(int k=1;k<row;k++) {
System.out.print(attrs[i][j]+" ");
count -=1;
i--;
}
//遍歷起始位置前進
i++;
j++;
//每次遍歷一環橫豎各少兩個邊,所以減去
row = row-2;
col = col-2;
}
}
這樣就可以有序輸出了,網上大神真的多。我看了一大圈全是C++和C語言的實現, 我就用Java寫了一下,果然好使。真的屌。 發出來給大家共勉。