A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1   2     3    4
12 13   14   5
11  16   15  6
10   9    8    7

4 个回复

倒序浏览
本帖最后由 大智灰 于 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;
        }
        
}
回复 使用道具 举报
大智灰 发表于 2016-9-15 18:38
import java.util.ArrayList;
//这是顺时针螺旋矩阵数组
public class Solution {

不能运行
回复 使用道具 举报
[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[i].length ; j ++) {
				System.out.print(arr[i][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][i] = count;
		}
		if(count == ends) {
			return;
		}
		//右纵行
		count --;
		for(int i = start;i < end ; i ++) {
			count++;
			arr[i][end-1] = count;
		}
		//下横行
		count--;
		for(int i = end-1;i > start-1;i--) {
			count ++;
			arr[end-1][i] = count;
		}
		if(count == ends) {
			return;
		}
		//左纵行
		count --;
		for(int i = end - 1 ; i >start;i --) {
			count ++;
			arr[i][start] = count;
		}
		demo9_text(arr,start + 1,end - 1,count,ends);
	}
回复 使用道具 举报
[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[i][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[i][j++]=value++;
			}
			while(i<max){//i++向下
				arr[i++][j]=value++;
			}
			while(j>min){//j--向左
				arr[i][j--]=value++;
			}
			while(i>min){//i--向上
				arr[i--][j]=value++;
			}
			if(min==max){//传入的二维数组是奇数时,给定最中间的值
				arr[i][j]=value;
			}
			i++;//起始点变更
			j++;
			max--;//循环一次,循环范围缩小一次
			min++;
		}
	}

}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马