黑马程序员技术交流社区

标题: 求一份二维数组螺旋打印的思想或者代码 [打印本页]

作者: lipeng518    时间: 2016-9-12 00:27
标题: 求一份二维数组螺旋打印的思想或者代码
1   2     3    4
12 13   14   5
11  16   15  6
10   9    8    7
作者: 大智灰    时间: 2016-9-15 18:38
本帖最后由 大智灰 于 2016-9-15 18:54 编辑

import java.util.ArrayList;
//这是顺时针螺旋矩阵数组
public class Solution {
    public static ArrayList<Integer> printMatrix(int [][] matrix) {
                ArrayList<Integer> list=new ArrayList<Integer>();
                if (matrix.length==1) {
                        for (int i = 0; i < matrix[0].length; i++) {
                                list.add(matrix[0]);
                        }
                        return list;
                }
               if(matrix[0].length==1){
                       for(int i=0;i<matrix.length;i++){
                              list.add(matrix[0]);
                      }
                      return list;
                }
                int num=matrix.length<matrix[0].length?matrix.length:matrix[0].length;
                if (num%2==1)
                        num=num+1;
                for (int i = 0; i < num/2; i++) {
                        for (int j = 0; j < matrix.length-2*i; j++) {
                                list.add(matrix[j+i]);
                        }
                        for (int j = 0; j < matrix.length-2*i-1; j++) {
                                list.add(matrix[j+i+1][matrix.length-1-i]);
                        }
                        if (i==matrix.length-1-i) {
                                break;
                        }
                        for (int j =0; j < matrix.length-2*i-1; j++) {
                                list.add(matrix[matrix.length-1-i][matrix.length-2-j-i]);
                        }
                        for (int j = 0; j < matrix.length-2-2*i; j++) {
                                list.add(matrix[matrix.length-2-i-j]);
                        }
                        
                }
                return list;
        }
        
}
作者: yu244934256    时间: 2016-9-30 01:04
大智灰 发表于 2016-9-15 18:38
import java.util.ArrayList;
//这是顺时针螺旋矩阵数组
public class Solution {

不能运行
作者: Reisen    时间: 2016-10-3 00:42
[Java] 纯文本查看 复制代码
public static void demo9() {
                Scanner sc = new Scanner(System.in);
                System.out.println("请选择方阵长度");
                int end = sc.nextInt();
                int start = 0;
                //int end = 4;
                int count = 0;
                int[][] arr = new int[end][end];
                //调用方法赋值
                demo9_text(arr,start,end,count,end*end);
                //打印二维数组
                for(int i = 0 ; i < arr.length ; i ++) {
                        for(int j = 0 ; j < arr.length ; j ++) {
                                System.out.print(arr[j]+"\t");
                        }
                        System.out.println();
                }
        }
        //五个参数,数组,本圈开始索引,本圈最大索引,要填写数字,最大(终止)数字
        private static void demo9_text(int[][] arr,int start,int end,int count,int ends) {
                //打印第一横行
                for(int i = start ; i < end ; i ++) {
                        count ++;
                        arr[start] = count;
                }
                if(count == ends) {
                        return;
                }
                //右纵行
                count --;
                for(int i = start;i < end ; i ++) {
                        count++;
                        arr[end-1] = count;
                }
                //下横行
                count--;
                for(int i = end-1;i > start-1;i--) {
                        count ++;
                        arr[end-1] = count;
                }
                if(count == ends) {
                        return;
                }
                //左纵行
                count --;
                for(int i = end - 1 ; i >start;i --) {
                        count ++;
                        arr[start] = count;
                }
                demo9_text(arr,start + 1,end - 1,count,ends);
        }

作者: Lee_Hoon_Leong    时间: 2016-10-8 12:21
[AppleScript] 纯文本查看 复制代码
package com.heima.demo;

import java.util.Scanner;



public class Demo_09 {

        /**
         *写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
         *        1        2         3         4
                12       13        14        5
                11       16        15        6
                10       9          8        7
         */
        public static void main(String[] args) {
                Scanner sc=new Scanner(System.in);
                System.out.println("输入要打印成螺旋数组的个数");
                int n=sc.nextInt();
                int[][] arr=new int[n][n];
                Method(arr);
                for(int i=0;i<arr.length;i++){
                        for (int j = 0; j < arr.length; j++) {
                                System.out.print(arr[j]+"\t");
                        }
                        System.out.println("");
                }
        }

        private static void Method(int[][] arr) {
                int i=0;
                int j=0;
                int max=arr.length-1;
                int min=0;
                int value=1;
                System.out.println(max);
                while(min<=max){
                        while(j<max){//j++向右
                                arr[j++]=value++;
                        }
                        while(i<max){//i++向下
                                arr[i++][j]=value++;
                        }
                        while(j>min){//j--向左
                                arr[j--]=value++;
                        }
                        while(i>min){//i--向上
                                arr[i--][j]=value++;
                        }
                        if(min==max){//传入的二维数组是奇数时,给定最中间的值
                                arr[j]=value;
                        }
                        i++;//起始点变更
                        j++;
                        max--;//循环一次,循环范围缩小一次
                        min++;
                }
        }

}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2