写个算法:打印如下形式的数字
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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?