【JAVA】腾讯研发类在线笔试题之蛇形矩阵实现

来源:互联网 发布:软件开发找对象 编辑:程序博客网 时间:2024/06/02 05:51

给定一个常数N,得到一个N*N的二维正方形矩阵,矩阵的排列规则犹如螺旋的蛇形。

例如给定常数4,得

1 2 3 4

12 13 14 5

11 16 15 6

10 9 8 7

例子:3

1 2 3

8 9 4

7 6 5

代码思想:

设定两个索引,i表示第i行,j表示第j列

1,右移,行i不变,列j自增,开始向右赋值,遍历到没有赋过值得最右端,转下移2;

2,下移,列j不变,行i自增,开始向下赋值,遍历到没有赋过值得最下端,转左移3;

3,左移,行i不变,列j自减,开始向左赋值,遍历到没有赋过值得最左端,转上移4;

4,上移,列j不变,行i自减,开始向上赋值,遍历到没有赋过值得最上端,转右移2;

当赋值到N*N的时候,即可得蛇形正方形矩阵。

代码如下:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Snake {public static void main(String []args){BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String str = "";try{str = br.readLine();}catch(IOException e){e.printStackTrace();}int N= Integer.parseInt(str);int[][] arr =  getSnakeArray(N);for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {System.out.print(arr[i][j]+" ");}System.out.println();}}//蛇形矩阵public static int[][] getSnakeArray(int N){if(N<=0){return null;}boolean flagDown =false;boolean flagLeft = false;boolean flagTop =false;boolean flagRight =true;int sum = N*N;int j=0;int i=0;int [][]arr = new int[N][N];arr[0][0] = 1;for(int count=2;count<=sum;count ++){//1,右移,行i不变,列j自增,开始向右赋值,遍历到没有赋过值得最右端,转下移2;if(flagRight&&j+1<N&&arr[i][j+1]==0){j++;arr[i][j]=count;}else if(flagRight){flagDown=true;flagLeft = false;flagTop =false;flagRight =false;count--;continue;}//2,下移,列j不变,行i自增,开始向下赋值,遍历到没有赋过值得最下端,转左移3;if(flagDown&&i+1<N&&arr[i+1][j]==0){i++;arr[i][j]=count;}else if(flagDown){flagLeft=true;flagDown =false;flagTop =false;flagRight =false;count--;continue;}//3,左移,行i不变,列j自减,开始向左赋值,遍历到没有赋过值得最左端,转上移4;if(flagLeft&&j-1>=0&&arr[i][j-1]==0){j--;arr[i][j]=count;}else if(flagLeft){flagTop=true;flagDown =false;flagRight = false;flagLeft =false;count--;continue;}//4,上移,列j不变,行i自减,开始向上赋值,遍历到没有赋过值得最上端,转右移2;if(flagTop&&i-1>=0&&arr[i-1][j]==0){i--;arr[i][j]=count;}else if(flagTop){flagRight=true;flagDown =false;flagLeft = false;flagTop =false;count--;continue;}}return arr;}}



1 0
原创粉丝点击