美文网首页Java
回形打印二维数组

回形打印二维数组

作者: 一去二三步 | 来源:发表于2017-11-07 19:09 被阅读963次

一、问题描述

输入两个数字 行数和列数,回形打印出一个二维数组,大小按回形的方向依次递增。

如:  输入:  4 、5
输出: 
0   1   2   3 
13  14  15  4
12  19  16  5
11  18  17  6
10  9   8   7

二、解题思路

顺着数字的轨迹,你会发现他的打印是一层一层的,即:第一层0-13、第二层为14-19。所以这个问题我们可以将他拆分开来,采用递归来做。

三、实现代码

 /**
     *
     * @param arr  数组
     * @param row  行
     * @param col  列
     * @param level 层数
     * @param count 计数
     */
    public void travel(int [][] arr, int row, int col, int level, int count) {
        //递归出口 
        if (row - 2 * level == 0 || col - 2 * level == 0) {
            return;
        }

        if (row - 2 * level == 1) {
            for (int i = level; i < col -level; ++i) {
                arr[level][i] = count++;
            }
            return;
        }

        if (col - 2 * level == 1) {
            for (int i = level; i < row -level; ++i) {
                arr[i][level] = count++;
            }
            return;
        }

        /**
         * 遍历四条边
         */
        for (int i = level; i < col - level; ++i) {
            arr[level][i] = count++;
        }

        for (int i = level + 1; i < row - 1 - level; ++i) {
            arr[i][col - 1 - level] = count++;
        }

        for (int i = col - 1 - level; i >= level; --i){
            arr[row - 1- level][i] = count++;
        }

        for (int i = row - 2 - level; i >= level+1; --i){
            arr[i][level] = count++;
        }
       // 递归
        travel(arr, row, col, level + 1, count);
    }


    /**
     * 打印
     * @param arr
     * @param row
     * @param col
     */
    public void print(int[][] arr, int row, int col){
        for (int i = 0; i < row; ++i){
            for (int j = 0; j < col; ++j){
                System.out.print(arr[i][j] + "    ");
            }
            System.out.println();
        }
    }

    @Test
    public void testTravel() {
        int [][] arr = new int[4][5];
        travel(arr, 4, 5, 0, 0);
        print(arr, 4, 5);
    }
输出结果.png

相关文章

  • 回形打印二维数组

    一、问题描述 输入两个数字 行数和列数,回形打印出一个二维数组,大小按回形的方向依次递增。 二、解题思路 顺着数字...

  • java-数组

    定义数组 创建一维数组 二维数组 二维数组分配值 打印数组

  • 二维数组

    二维数组树出杨辉三角:打印杨辉三角形(行数可以键盘录入)

  • Java二维数组

    二维数组树出杨辉三角:打印杨辉三角形(行数可以键盘录入)

  • for 循环 打印图形

    利用二维数组打印图形!

  • C++编程练习题2——数组与指针

    打印杨辉三角形(8行)。杨辉三角形:11 11 2 11 3 3 1提示:使用二维数组并利...

  • 杨辉三角的打印

    打印杨辉三角,熟悉二维数组的使用。二维数组的声明和初始化。 输入 5,打印输出

  • php一维数组转成二维数组

    (1)数值数组从一维转成二维 打印如下图所示 (2)索引数组从一维转成二维 打印如下图所示

  • java学习第九章(数组)

    数组 数组的循环 数字12345倒序打印 二维数组 二维数组的循环 数组找到最大值 数组的排序(冒泡算法) 变量交...

  • 打印杨辉三角形

    二维数组树出杨辉三角:打印杨辉三角形(行数可以键盘录 public class two { public stat...

网友评论

    本文标题:回形打印二维数组

    本文链接:https://www.haomeiwen.com/subject/ppmjmxtx.html