写个算法:打印如下形式的数字

9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9
9 8 7 6 6 6 6 6 6 6 6 6 6 6 7 8 9
9 8 7 6 5 5 5 5 5 5 5 5 5 6 7 8 9
9 8 7 6 5 4 4 4 4 4 4 4 5 6 7 8 9
9 8 7 6 5 4 3 3 3 3 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 2 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 2 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 3 3 3 3 4 5 6 7 8 9
9 8 7 6 5 4 4 4 4 4 4 4 5 6 7 8 9
9 8 7 6 5 5 5 5 5 5 5 5 5 6 7 8 9
9 8 7 6 6 6 6 6 6 6 6 6 6 6 7 8 9
9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9
9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9

下面是递归实现:

public class DiGuiHuiXuan {
/**
* 本递归算法得思路是:把二维数组看成回行圈,赋值的时候先赋值二维数组的最外围,
* 有外而内一圈一圈的递归赋值
*注意根据数组下标从0开始的特点,每一圈的子二维数组的maxRow和minRow
* maxColumn 和minColumn有如下数学关系
* maxRow + minRow = array.length -1
* maxColumn + minColumn = array.length-1
* @param array
* @param n 回旋数组开始指定的数,或者说是递归调用中子二维数组的最外圈的值
* @param m 记录每一圈的二维子数组的最大行和最大列
*/
public static void huiXuan(int[][] array, int n, int m) {
//递归出口
if (1 == n) {
//取数组的中心位置
int center = array.length >> 1;
array[center][center] = 1;
return;
}
//最下面的行
int maxRow = m;
//最右边的列
int maxColums = m;
//最上面的行
int minRow = array.length - 1 - maxRow;
//最左边的列
int minColums = array.length - 1 - maxColums;
//(子)二维数组的最上面一行
for (int i = minColums; i <= maxColums; i++) {
array[minColums][i] = n;
}
//(子)二维数组的最右边一列
for (int i = minRow; i <= maxRow; i++) {
array[i][maxColums] = n;
}
//(子)二维数组的最下面一行
for (int i = maxColums; i >= minColums; i--) {
array[maxRow][i] = n;
}
//(子)二维数组的最左边一列
for (int i = minColums; i < maxColums; i++) {
array[i][minColums] = n;
}
//递归调用
huiXuan(array, --n, --m);
}
//主函数
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个大于0小于10的数字(输入后回车):");
int n = s.nextInt();
int array[][] = new int[2*n-1][2*n-1];
huiXuan(array, n, array.length - 1);
print(array);
}
/**
* 打印二维数组
* @param array int[][]
*/
public static void print(int array[][]) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
}

非递归实现见:http://blog.csdn.net/chunqiuwei/article/details/7020729

递归实现回旋数组的小程序相关推荐

  1. 列表对象转数组 微信小程序_微信小程序——无限递归的层次列表

    --上礼拜踩的坑 1.关于为什么不直接操作DOM对象? 因为微信小程序里没有document对象. 2.为什么坑了这多时间? 因为之前看了个过期的帖子,完美避开了解决方案. 下面进入正文,需求是在微信 ...

  2. 数组追加数组,小程序数组里面追加数组如何操作?

    由于写错小程序生命周期函数方法名称「onLoad > onload」,一直以为自己用错了push- 需求描述 var arr=[];var value = [ 'a','b','c','d' ] ...

  3. 如何创建二维数组 微信小程序_微信小程序遍历二维数组

    在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: { familys:[ { familyName:'贾家', users: [ {name:'贾宝玉'}, {name: ...

  4. 微信小程序读取服务器多个数组,微信小程序多层嵌套循环,二级数组遍历

    小程序中的遍历循环类似于angularJS的遍历. 二级数组遍历有一个坑.二级遍历wx:for循环的时候,需要注意.(代码如下) JS代码: data: { groups: [ [ { title: ...

  5. 微信小程序php返回数组,微信小程序 数组(增,删,改,查)等操作实例详解...

    微信小程序 数组(增,删,改,查)等操作 最近在做一个小程序的demo.由于不向后台请求数据,所以就涉及到对本地数据的操作,也遇到了一些坑,本文就以数组的增删改查为例,给新手分享一些经验. 首先这是原 ...

  6. 微信小程序传数组给后台(thinkphp后台接受前端数组参数)

    场景:需要前端传关联数组给后端 尝试:常规写法不好使 解决:前端json序列化 对象数组 为 字符串 str,然后将此字符串 str 作为参数的值传给后端(比如 schools: str ),后端将收 ...

  7. 浅谈高大上的微信小程序中渲染html内容—技术分享

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...

  8. 微信小程序多文件上传之wx-multipart

    微信小程序多文件上传之wx-multipart 前言:我后端写了个多文件上传接口,奈何前端同事说微信小程序只能单文件上传,要支持多文件上传还要我单独再写一个单文件上传的接口,我他喵- 我看了下微信小程 ...

  9. 在微信小程序中渲染HTML内容

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...

  10. 微信小程序中嵌套html_在微信小程序中渲染HTML内容的方法示例

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...

最新文章

  1. 基于JSP实现人力资源管理系统
  2. 如何利用大数据进行精准营销
  3. 程序员,请您不要老是熬夜
  4. 【转载】javascript下ie7,ie8的Date Bug的解决
  5. linux mac地址文件夹,android4.4.2系统的mac地址文件在哪个文件里面
  6. c语言实现图像拼接程序,opencv2实现10张图像上下左右拼接融合分享!
  7. mysql索引增加栏位_mysql 添加索引 mysql 如何创建索引
  8. [Leetcode][JAVA] Populating Next Right Pointers in Each Node II
  9. dockerfile制作docker镜像
  10. perl查看文件,提取指定信息输出到文件
  11. eNSP模拟器中 FTP 实验
  12. 正确打开db文件的方式,避免乱码和无意义内容
  13. 3dmax2022新功能特性-3ds max2022中文版安装包安装教程
  14. 抖音快手短视频去水印API,接口开发文档
  15. 华为防火墙-USG6000系列-补丁的安装和删除
  16. android 输入法判断,Android如何检测输入法键盘是否显示
  17. 文件如何生成链接插入到微信公众号,如Word、Excel、Pdf等
  18. Yolov5笔记--检测bilibili下载好的视频
  19. 基于T5CPU的智能屏产品型号与内核对照表
  20. NASA搞无人车?中国航天也将携手人工智能技术

热门文章

  1. 历史悠久的区块链游戏:麻将
  2. 设计模式_单例模式回顾_C#版不使用锁保证多线程安全
  3. WL-OA Kernel论文讲解——On Valid Optimal Assignment Kernels and Applications to Graph Classification
  4. 一文快速掌握 Git 用法(Git介绍及使用流程)
  5. arduino学习笔记(一)——bamboosir920
  6. 这些“大学”,将被除名!
  7. leetcode 189. 旋转数组(Rotate Array)
  8. 机器学习入门二 ----- 机器学习术语表
  9. Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
  10. 页面打开自动触发onlick事件