- /**
- * 思路:把一个矩阵看做是一个个正方形套在一起,由最外边的那个正方形开始去赋值。因为这个赋值的过程是
- * 重复去操作,而且正方形的个数如果不是很多,可以考虑递归。正方形的个数(len/2)(其中len是矩阵的
- * 边长)。在遍历的每一个正方形的起点的位置就是上一个正方形终点的列值加1,起点的值就是上一个正方形
- * 终点的值加1.
- *
- * 注:代码里可以指定矩阵的边长的,不一定要是正方形矩阵,也可以是长方形矩阵(思路里是真的正方形写的,
- * 长方形可他其实是一样的)。
- */
- public class Test2 {
- public static int[][] array = new int[10][10];
- public static void main(String[] args) {
- int x_len = 5;
- int y_len = 7;
- putValues(x_len,y_len, 0, 0, 1);
- printlnArray(x_len,y_len);
- }
- public static void putValues(int x_len,int y_len, int x, int y, int first_value) {
- //如果边长为1,说明就一个值,直接赋值即可,然后return出去(递归的出口)
- if (x_len == 1) {
- for(int i=0;i<y_len;i++){
- array[x][y++] = first_value++;
- }
- return;
- }
- array[x][y] = first_value;
- //上,右,下,左 循环给数组赋值(这样的顺序是因为值都是在累加的)
- for (int j = 0; j < y_len-1; j++) {
- array[x][++y] = ++first_value;
- }
- for (int j = 0; j < x_len-1; j++) {
- array[++x][y] = ++first_value;
- }
- for (int j = 0; j < y_len-1; j++) {
- array[x][--y] = ++first_value;
- }
- for (int j = 0; j < x_len-2; j++) {
- array[--x][y] = ++first_value;
- }
- //判断矩阵的变长是否>=1(如果是,继续给内部的方形赋值)递归
- if(x_len -2>=1){
- putValues(x_len - 2,y_len-2, x, ++y, ++first_value);
- }
-
- }
- public static void printlnArray(int x_len,int y_len) {
- for (int i = 0; i < x_len; i++) {
- System.out.print("*");
- for (int j = 0; j < y_len; j++) {
- System.out.print(array[i][j] + " ");
- }
- System.out.println("");
- }
- }
- }
复制代码 对长方形矩阵可以满足螺旋打印。。。{:soso_e100:} |