蛇形矩阵 面试算法(1)
2014-04-13 04:33
246 查看
前段时间微信订阅号收到一个关于算法的面试题,是让实现一个N阶的蛇形矩阵。
题中所给图为如下的正方形。
![](http://s3.51cto.com/wyfs02/M00/23/FD/wKiom1NJoBmDv6hmAAAjFGl-Xyw687.jpg)
分析:观察可知图中数据排列规律。 1. 数据从最右边一列开始,由上至下至最后一行; 2. 由最下一行自右向左,至最左端;
3. 与 1 顺序相反,由下至上至第一行;
4. 与 2 顺序相反,由左至右至倒数第二列;
5. 依次执行1,2,3,4 至 矩阵填满,或当前数据至达到N*N。
注:图中数据只可被赋值依次,且沿顺时针方向变化。
题中所给图为如下的正方形。
![](http://s3.51cto.com/wyfs02/M00/23/FD/wKiom1NJoBmDv6hmAAAjFGl-Xyw687.jpg)
分析:观察可知图中数据排列规律。 1. 数据从最右边一列开始,由上至下至最后一行; 2. 由最下一行自右向左,至最左端;
3. 与 1 顺序相反,由下至上至第一行;
4. 与 2 顺序相反,由左至右至倒数第二列;
5. 依次执行1,2,3,4 至 矩阵填满,或当前数据至达到N*N。
注:图中数据只可被赋值依次,且沿顺时针方向变化。
/** * project Algorithm * package finish * fileInfo SnakeMartix.java 2014-3-29 下午1:21:48 * author WANGXIN * aim TODO */ package finish; import java.util.Scanner; /** * @author WANGXIN by 2014-3-29下午1:21:48 * @version v1.0 */ public class SnakeMartix { public static void main(String[] args) { int M; int N; System.out .println("Please input the Snake-Matrix`s rows and columns: "); System.out.print("rows = "); @SuppressWarnings("resource") Scanner scanner = new Scanner(System.in); M = scanner.nextInt(); System.out.print("columns = "); N = scanner.nextInt(); System.out.println("Snake-Matrix(" + M + " , " + N + ")"); printSnake(M, N); } /** * display the Snake-Matrix * * @param M * the row of the Matrix * @param N * the columns of the Matrix */ public static void printSnake(int M, int N) { int num = 0; int i = 0; int j = 0; int x = 0; int y = 0; int[][] arr = new int[M] ; char[][] str = new char[M] ; int min = M > N ? N : M; min = (int)Math.round(min / 2.0 + 0.5); while (true) { for (i = x; i <= M - 1 - x; i++) { if (num == M * N) break ; arr[i][N - 1 - y] = ++num; str[i][N - 1 - y] = '↓'; } y++;// decrease y line(s) for (j = N - 1 - y; j >= y - 1; j--) { if (num == M * N) break ; arr[M - y][j] = ++num; str[M - y][j] = '←'; } x++;// decrease x line(s) for (i = M - 1 - x; i >= x - 1; i--) { if (num == M * N) break ; arr[i][y - 1] = ++num; str[i][y - 1] = '↑'; } for (j = y; j < N - y; j++) { if (num == M * N) break ; arr[y - 1][j] = ++num; str[y - 1][j] = '→'; } if (y == min || x == min) { // System.out.println("x = " + x + " y = "+ y);//label is not the most efficient break; } } System.out.println(); for (int k = 0; k < M; k++) { for (int k2 = 0; k2 < N; k2++) { System.out.print(arr[k][k2] + "\t"); } System.out.println(); } System.out.println(); System.out.println("-----------direction show as follow------------"); for (int k = 0; k < M; k++) { for (int k2 = 0; k2 < N; k2++) { System.out.print(str[k][k2] + "\t"); } System.out.println(); } } }
相关文章推荐
- 方欣科技算法题面试:蛇形矩阵
- 方欣科技算法面试:蛇形矩阵2
- 常见面试算法之转圈打印矩阵
- 常见面试算法之旋转打印矩阵
- 面试算法(十九)顺时针打印矩阵
- 面试算法①——转圈打印矩阵
- Java企业面试算法新得体会之8数组和矩阵问题6问
- 【LeetCode-面试算法经典-Java实现】【070-Set Matrix Zeroes(矩阵置零)】
- 经典算法面试题目-矩阵旋转90度(1.6)
- 经典算法面试题目-矩阵旋转90度(1.6)
- 笔试面试算法经典--矩阵的最短路径和(Java)
- 常见的矩阵 面试算法(4)
- 【LeetCode-面试算法经典-Java实现】【074-Search a 2D Matrix(搜索二维矩阵)】
- 算法题:蛇形打印矩阵
- 数据结构和算法-010 数组排序 希儿排序
- 算法题1:蛇形打印矩阵
- 经典算法面试题目-置矩阵行列元素为0(1.7)
- IOS面试算法题(4)——反斜对角线打印矩阵
- 经典算法面试题目-置矩阵行列元素为0(1.7)
- 牛客面试算法题精讲【个人总结】-矩阵的转圈、旋转90度、“之”字形打印