之前找工作的时候去头条碰碰运气,然后结果一面就惨败回家。不得不说头条的面试很有分量。一面小哥开场看了一下我的简历,然后直接就说那你做个题吧。然后现场写了个回形数组,让我写个算法遍历下。说实话本人算法 真的很水。也没有 刻意去研究过。所以当场就凉凉,尽然给面试官很猥琐的说,我能不能给你用快排排个序输出不就有序了。然后面试官笑而不语摇摇头。当时紧张加上思维混乱,总觉得用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写了一下,果然好使。真的屌。 发出来给大家共勉。