java 外螺旋矩阵_螺旋矩阵的java实现
今天参加了腾讯实习生的在线笔试,螺旋矩阵的问题,算是ACM的入门题吧
想到了有两种实现递归和非递归
输入:3
输出:
1 2 3 8 9 4 7 6 5
输入:5
输出:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
package com.bonult.algorithm;
import java.util.Scanner;
/**
* @author bonult
*
*/
public class HelixMatrix {
public static void main(String[] args) {
int i, j, n;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
sc.close();
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
System.out.print(String.format("%2d ", calculate(n-1, i, j)));
}
System.out.println();
}
}
// 递归求解
private static int calculate(int basic, int n, int i, int j) {
if (0 == i) {
return basic + j + 1;
} else if (n - 1 == j) {
return basic + n + i;
} else if (n - 1 == i) {
return basic + 2 * (n - 1) + n - j;
} else if (0 == j) {
return basic + 3 * (n - 1) + n - i;
} else {
return calculate(basic + 4 * (n - 1), n - 2, i - 1, j - 1);
}
}
// 非递归求解
private static int calculate(int n, int i, int j) {
// (i, j)位置的数值
int k = 0;
// 用来计算(i, j)的外有几个完整的“圈”
int mini = i < n - i ? i : n - i;
int minj = j < n - j ? j : n - j;
int min = mini < minj ? mini : minj;
int h;
// h用来控制层数
for (h = 0; h < min; ++h) {
// 内层的圈要比临近外层的圈的边长小2
k += (n - 2 * h) * 4;
}
// (i, j)位于同层的上方
if (i == min) {
// 直接取得j坐标的位置,注意需要减掉min,因为外围已经计算过了
k += j - min + 1;
}
// (i, j)位于同层的右侧
else if (j == n - min) {
// 需要加上上方边长的长度
k += (n - 2 * min) + (i - min) + 1;
}
// (i, j)位于同层的下方
else if (i == n - min) {
// 需要加上上方和右侧的长度
k += (n - 2 * min) * 2 + (n - min - j) + 1;
}
// (i, j)位于同层的左侧
else if (j == min) {
// 需要加上上方、右侧和下方的长度
k += (n - 2 * min) * 3 + (n - min - i) + 1;
}
return k;
}
}
java 外螺旋矩阵_螺旋矩阵的java实现相关推荐
- java编程工具 初学者_面向初学者的Java编程在线课程
java编程工具 初学者 There are many java programming course online provided by many services. I use Udemy be ...
- java list e 查找_源码(04) -- java.util.ListE
java.util.List 源码分析(JDK1.7) ------------------------------------------------------------------------ ...
- java下拉菜单_薪资对比:Java开发和web前端薪资哪个好
Web前端开发和Java开发哪个薪资更高,Web前端开发和Java开发发展前景更好? 互联网行业飞速发展,因此有很多小伙伴想要进入IT行业分一杯羹,但是学什么技术更好,哪一个语言的就业薪资更高,就成了 ...
- java主要内存区域_可能是把Java内存区域讲的最清楚的一篇文章
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄 ...
- java class 文件分析_大概优秀的java程序员都要会分析class文件吧
相信大家在学java的时候都会听到这样的一些结论: enum 是一个类 泛型的实现使用了类型擦除技术 非静态内部类持有外部类的引用 需要将自由变量声明成final才能给匿名内部类访问 ... 初学的时 ...
- java 基础 笔试题_非常全面的java基础笔试题
1.下列说法正确的是() (程序结构) A java程序的main方法必须写在类甩面 B java程序中可以有多个main方法 C.java程序中类名必须与文件名一样 D.JAVA程序的main方法中 ...
- 李兴华java视频在线观看_李兴华Java开发实战经典视频教程_IT教程网
资源名称:李兴华Java开发实战经典视频教程 资源目录: [IT教程网]010201_[第2章:简单Java程序]_简单Java程序 [IT教程网]010301_[第3章:Java基础程序设计]_Ja ...
- 李兴华java实战经典视频_李兴华Java开发实战经典视频教程
资源名称:李兴华Java开发实战经典视频教程 资源目录:[一品资源网]010201_[第2章:简单Java程序]_简单Java程序[一品资源网]010301_[第3章:Java基础程序设计]_Java ...
- 我的世界java边境之地_边境之地/Java版
此特性为Java版独有. X/Z轴的边境之地已经被修复于Beta 1.8,因此如果不对Minecraft进行修改它们就不会存在于游戏中.此外,大部分的距离现象已被修复,但Y轴边境之地还没有被修复,但仍 ...
- java中char类型_【考点】JAVA中的char类型
写在前面: 本周,在我们同学的刷题群里,一位同学上传了一道关于char的题,引起的不少同学的热议.热议的同时,我们也发现近乎一半的同学对char的基础知识一知半解,今天我们给大家一个浅显易懂的解释,赶 ...
最新文章
- 【OpenCV】cv::Mat和std::vector之间的相互转换
- winform改变控件的外形
- 一个Quake2的世界浏览器DEMO(附源码)
- SAP 财务模块 FI-TV 差旅管理
- Apache虚拟主机指南
- 要不要出去找一份实习?
- Media所有参数汇总
- java中软填空面试题,通过这9个Java面试题,就可以入职华为啦
- 汇编语言中常用指令对标志位寄存器的影响
- cf修复服务器,CF:“卡顿”问题终于得到重视!新版本宣布修复,玩家这下开心了...
- oracle协议适配器错误tns,ORA-12560: TNS: 协议适配器错误 常见原因
- React系列--jsx语法及虚拟dom,渲染
- Visual Studio里的BUG??
- 在二维码中间添加logo或者图片
- .NET发送邮箱(验证码)
- C语言写三子棋,冲冲冲!
- 人类像计算机一样思考 议论文,人工智能时代——人应像人一样思考作文800字...
- 人工智能与深度神经网络,人工智能深度神经网络
- 6款炫酷的HTML5 3D特效源码
- GAMES101第四讲Transformation Cont.笔记
热门文章
- 组件通信之pubsub
- libmysqld_dev linux,解决mysql安装mysqld doesn\'t exist or is not-鸟哥のlinux-ChinaUnix博客
- 精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务
- java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion
- ETL异构数据源Datax_数据准备_03
- ElasticSearch docker安装
- 解决:Error response from daemon: manifest for xxx:latest not found: manifest unknown...
- (需求实战_03)_shell脚本 sftp协议下载文件
- android studio 调用c++,android studio配置opencv,调用c++,处理图像
- 拼的html页面乱,页面分页html拼接