类似这种:

1 2 3 4 5

12 13 14 6

11 15 7

10 8

9

认为第二种方法简单还是第一种方法简单直接决定了你的水平.

package test;

/**

* 二维数组 三角填充

* 1 2 3 4 5

* 12 13 14 6

* 11 15 7

* 10 8

* 9

*

* 1 2 3 4 5 6

* 15 16 17 18 7

* 14 21 19 8

* 13 20 9

* 12 10

* 11

*

* 1 2 3 4 5 6 7

* 18 19 20 21 22 8

* 17 27 28 23 9

* 16 26 24 10

* 15 25 11

* 14 12

* 13

* @author fans

*/

public class ArrayTest {

public static void main(String[] args) throws InterruptedException {

ArrayTest a = new ArrayTest();

int count = 12;//第一排数字的个数

//从小到大排序

long begin = System.currentTimeMillis();

int[][] bc = a.TriangleFill(count);

long end = System.currentTimeMillis();

System.out.println(end - begin);

//从大到小排序

//begin = System.currentTimeMillis();

//int[][] bc1 = a.rTriangleFill(count);

//end = System.currentTimeMillis();

//System.out.println(end - begin);

//输出结果

for(int i = 0; i < count; i++)

{

int size = bc[i].length;

for(int j = 0; j < size; j++)

{

int number = bc[i][j];

if(number > 0)

{

System.out.print(number + "\t");

}

}

System.out.println("\n");

}

}

//第一种:从最小一个数依次添加(正推)

public int[][] TriangleFill(int count)

{

//创建对应数量及大小的数组

int[][] arr = new int[count][];

int size = count;

for(int i = 0; i < count; ++i)

{

arr[i] = new int[size];

size--;

}

int n = count; //方向的次数

int direction = 0;// 方向 0 右 1 下 2上

int x = 0, y = -1;每个点的坐标

int num = 1;//数值

while(n > 0)

{

for(int i = 0; i < n; ++i)

{

switch(direction) {

case 0:

arr[x][++y] = num++;

if(i + 1 >= n)direction = 1;//改变方向

break;

case 1:

arr[++x][--y] = num++;

if(i + 1 >= n)direction = 2;//改变方向

break;

case 2:

arr[--x][y] = num++;

if(i + 1 >= n)direction = 0;//改变方向

break;

}

}

n--;

}

return arr;

}

//第二种:从最大一个点依次往外添加(逆推, 个人倾向于这种方法,逆天而行才是王道!-.-)

public int[][] rTriangleFill(int count)

{

//创建对应数量及大小的数组

int[][] arr = new int[count][];

int size = count;

for(int i = 0; i < count; ++i)

{

arr[i] = new int[size];

size--;

}

int max = (count + 1) * count / 2; //最大值 等差数列公式:(1+n)n/2

int direction = count % 3 ; // 最大值的方向0 下 1 左 2上

int x = count >=2 ? (count - 1) / 3 : 0;//最大值的x

int y = count >=2 ?(count + 1) / 3 : 0; //最大值的y

int beginPoint = 1;

while(max > 0)

{

for(int i = 0; i < beginPoint; ++i)

{

switch(direction) {

case 0:

if(i + 1 >= beginPoint)direction = 2;

arr[y++][x] = max--;

break;

case 1:

if(i + 1 >= beginPoint)direction = 0;

arr[y][x--] = max--;

break;

case 2:

if(i + 1 >= beginPoint)direction = 1;

arr[y--][x++] = max--;

break;

}

}

beginPoint++;

}

return arr;

}

}

java上三角数组_二维数组的三角填充 两种java实现的方法相关推荐

  1. C# 传递数组参数_一维数组_二维数组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. c++ 二维数组_二维数组的声明2019_04_18

    -------------[感谢小郡提供的图片] [广告位招租] ---------------------------------------------------------------- -- ...

  3. python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解

    本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...

  4. 建立二维数组_二维数组的 DP

    寻找不同路径和 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...

  5. python初始化一个二维数组_二维数组初始化

    对于一个M行N列的二维数组,可以看成是M行一维数组,一维数组是N列.例如 int array[3][2]; 是一个3行2列的二维数组,其实,如同3个一维数组,一维数组是2列.那么,对3行2列的二维数组 ...

  6. mysql怎样存储二维数组_二维数组存储

    windows栈结构:向低地址处增长 如上图,首先定义一个二维数组 M[2][3] = {1,2,3,4,5,6},其首地址M[0][0]为:0x0012FE44,其元素依次向低地址方向存储.内存中存 ...

  7. 数组_二维数组的初始化方式

    数组的初始化方式总共有三种:静态初始化.动态初始化.默认初始化. [1]静态初始化 除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值. eg: int[][] a ...

  8. Java 中的一维数组以及二维数组(8千字零基础超全详解)

    文章目录 前言 一.一维数组 1. 数组的初始化 1.1 动态初始化一 1.2 动态初始化二 1.3 静态初始化 2. 数组使用的注意事项和细节 3. 经典例题 4. 数组赋值机制(重难点!) 5. ...

  9. java 怎么用二维数组_java二维数组怎么用

    详细内容 Java的二维数组其实是一位数组的嵌套(每一行看做一个内层的一维数组) 定义格式数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][每个一维数组的长度]; ...

最新文章

  1. Hibernate一级缓存
  2. WindowsPhone7入手,实在的照片
  3. 数据中台实战:商品售前分析
  4. 《Netty 实战》Netty In Action中文版 第2章——你的第一款Netty应用程序(一)
  5. superset可视化-Time-series Percent Change
  6. mysql选择数据库创建数据库
  7. Dell 电话技术支持工程师答用户问(暴笑)
  8. c语言字符串字节数函数,C语言字符,字符串,字节操作常用函数
  9. WinEdt LaTex(五)—— 内容的排版
  10. 运动目标跟踪(八)--时空上下文(STC)跟踪原理
  11. 读书笔记 -《硅谷之火》《硅谷热》
  12. matlab分布拟合函数
  13. 阿里巴巴Java开发手册 PDF
  14. 指数退避和AIMD为什么都青睐数字2
  15. 爬取淘宝网站的商品数据
  16. windows2003 序列号
  17. 绿色养眼桌面壁纸[4P]
  18. 使用scrapy爬取手机版斗鱼主播的房间图片及昵称
  19. 快应用中心运营平台项目心得
  20. xcode6 关于iphone6、iphone6plus适配(一)

热门文章

  1. python设置字体_Python实现文字特效的方法
  2. coursera访问不了
  3. __name__ == '__main__'
  4. golang module实践
  5. python+selenium处理chrome显示通知弹框
  6. python发邮件和网络的简单使用
  7. python测试题 - 字典操作
  8. 列表,元组,集合,字典常用方法
  9. groovy 对 list 排序
  10. C#报表控件ReportViewer rdlc 例(1) .