蛇形打印数组(某宝典公司面试手撕代码题)
生活随笔
收集整理的這篇文章主要介紹了
蛇形打印数组(某宝典公司面试手撕代码题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景雜談
不知道為什么,可能腦袋一下放空了,一不小心就想到了大約2年前,在某個知名的寶典公司面試中,遇到了一道手撕代碼題,和多年前的google的那道螺旋遍歷數據有異曲同工之妙。現腦洞大開,想寫下與大家分享下,解題思路可能不是很正確,歡迎大家建議和指正。
問題描述
有一個數組如下所示,現在需要遍歷下,順序為:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
| 3 | 5 | 8 | 13 | 15 |
| 4 | 9 | 12 | 16 | 19 |
| 10 | 11 | 17 | 18 | 20 |
分析:咋一看,和那個螺旋數組挺像的,不過還是有些不一樣的
求解思路
如下圖所示:首先可以全部一個方向遍歷所有的數據,然后把每一組遍歷的結果加入list集合中。最后在list集合中,奇偶交錯輸出所有的數據就可以了。以上思路可能太直白了,應該有最優解,暫時沒想到,歡迎大家留言交流。
代碼示例
*** 蛇形打印數組* */public static void printSnakeArrays(int [][] array){//斜著遍歷的每一行的數據集合List<ArrayList> list = new ArrayList<>();//臨時數據ArrayList temp;int i=0,x,y;for(int j=0;j<array[i].length;j++){temp=new ArrayList();temp.add(array[i][j]);x=0;y=j;while ((x+1<array.length)&&(y-1>=0)){temp.add(array[x+1][y-1]);x++;y--;}list.add(temp);//豎著打印if (j==array[i].length-1) {for(int k=1;k<array.length;k++){x=k;y=j;temp=new ArrayList();temp.add(array[x][y]);while ((x+1)<array.length&&(y-1>=0)){temp.add(array[x+1][y-1]);x++;y--;}list.add(temp);}}}System.out.println("result:");int index=0;for(int m=0;m<list.size();m++){index++;if (index%2==0) {System.out.println(list.get(m));}else {Collections.reverse(list.get(m));System.out.println(list.get(m));}}}運行結果
[1] [2, 3] [4, 5, 6] [7, 8, 9, 10] [11, 12, 13, 14] [15, 16, 17] [18, 19] [20]總結
以上是生活随笔為你收集整理的蛇形打印数组(某宝典公司面试手撕代码题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos6.4下安装python3.
- 下一篇: idea中的markdown文档如何插入