java上三角数组_二维数组的三角填充 两种java实现的方法
类似这种:
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实现的方法相关推荐
- C# 传递数组参数_一维数组_二维数组
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- c++ 二维数组_二维数组的声明2019_04_18
-------------[感谢小郡提供的图片] [广告位招租] ---------------------------------------------------------------- -- ...
- python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解
本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...
- 建立二维数组_二维数组的 DP
寻找不同路径和 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...
- python初始化一个二维数组_二维数组初始化
对于一个M行N列的二维数组,可以看成是M行一维数组,一维数组是N列.例如 int array[3][2]; 是一个3行2列的二维数组,其实,如同3个一维数组,一维数组是2列.那么,对3行2列的二维数组 ...
- mysql怎样存储二维数组_二维数组存储
windows栈结构:向低地址处增长 如上图,首先定义一个二维数组 M[2][3] = {1,2,3,4,5,6},其首地址M[0][0]为:0x0012FE44,其元素依次向低地址方向存储.内存中存 ...
- 数组_二维数组的初始化方式
数组的初始化方式总共有三种:静态初始化.动态初始化.默认初始化. [1]静态初始化 除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值. eg: int[][] a ...
- Java 中的一维数组以及二维数组(8千字零基础超全详解)
文章目录 前言 一.一维数组 1. 数组的初始化 1.1 动态初始化一 1.2 动态初始化二 1.3 静态初始化 2. 数组使用的注意事项和细节 3. 经典例题 4. 数组赋值机制(重难点!) 5. ...
- java 怎么用二维数组_java二维数组怎么用
详细内容 Java的二维数组其实是一位数组的嵌套(每一行看做一个内层的一维数组) 定义格式数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][每个一维数组的长度]; ...
最新文章
- Hibernate一级缓存
- WindowsPhone7入手,实在的照片
- 数据中台实战:商品售前分析
- 《Netty 实战》Netty In Action中文版 第2章——你的第一款Netty应用程序(一)
- superset可视化-Time-series Percent Change
- mysql选择数据库创建数据库
- Dell 电话技术支持工程师答用户问(暴笑)
- c语言字符串字节数函数,C语言字符,字符串,字节操作常用函数
- WinEdt LaTex(五)—— 内容的排版
- 运动目标跟踪(八)--时空上下文(STC)跟踪原理
- 读书笔记 -《硅谷之火》《硅谷热》
- matlab分布拟合函数
- 阿里巴巴Java开发手册 PDF
- 指数退避和AIMD为什么都青睐数字2
- 爬取淘宝网站的商品数据
- windows2003 序列号
- 绿色养眼桌面壁纸[4P]
- 使用scrapy爬取手机版斗鱼主播的房间图片及昵称
- 快应用中心运营平台项目心得
- xcode6 关于iphone6、iphone6plus适配(一)
热门文章
- python设置字体_Python实现文字特效的方法
- coursera访问不了
- __name__ == '__main__'
- golang module实践
- python+selenium处理chrome显示通知弹框
- python发邮件和网络的简单使用
- python测试题 - 字典操作
- 列表,元组,集合,字典常用方法
- groovy 对 list 排序
- C#报表控件ReportViewer rdlc 例(1) .