今天参加了腾讯实习生的在线笔试,螺旋矩阵的问题,算是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实现相关推荐

  1. java编程工具 初学者_面向初学者的Java编程在线课程

    java编程工具 初学者 There are many java programming course online provided by many services. I use Udemy be ...

  2. java list e 查找_源码(04) -- java.util.ListE

    java.util.List 源码分析(JDK1.7) ------------------------------------------------------------------------ ...

  3. java下拉菜单_薪资对比:Java开发和web前端薪资哪个好

    Web前端开发和Java开发哪个薪资更高,Web前端开发和Java开发发展前景更好? 互联网行业飞速发展,因此有很多小伙伴想要进入IT行业分一杯羹,但是学什么技术更好,哪一个语言的就业薪资更高,就成了 ...

  4. java主要内存区域_可能是把Java内存区域讲的最清楚的一篇文章

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄 ...

  5. java class 文件分析_大概优秀的java程序员都要会分析class文件吧

    相信大家在学java的时候都会听到这样的一些结论: enum 是一个类 泛型的实现使用了类型擦除技术 非静态内部类持有外部类的引用 需要将自由变量声明成final才能给匿名内部类访问 ... 初学的时 ...

  6. java 基础 笔试题_非常全面的java基础笔试题

    1.下列说法正确的是() (程序结构) A java程序的main方法必须写在类甩面 B java程序中可以有多个main方法 C.java程序中类名必须与文件名一样 D.JAVA程序的main方法中 ...

  7. 李兴华java视频在线观看_李兴华Java开发实战经典视频教程_IT教程网

    资源名称:李兴华Java开发实战经典视频教程 资源目录: [IT教程网]010201_[第2章:简单Java程序]_简单Java程序 [IT教程网]010301_[第3章:Java基础程序设计]_Ja ...

  8. 李兴华java实战经典视频_李兴华Java开发实战经典视频教程

    资源名称:李兴华Java开发实战经典视频教程 资源目录:[一品资源网]010201_[第2章:简单Java程序]_简单Java程序[一品资源网]010301_[第3章:Java基础程序设计]_Java ...

  9. 我的世界java边境之地_边境之地/Java版

    此特性为Java版独有. X/Z轴的边境之地已经被修复于Beta 1.8,因此如果不对Minecraft进行修改它们就不会存在于游戏中.此外,大部分的距离现象已被修复,但Y轴边境之地还没有被修复,但仍 ...

  10. java中char类型_【考点】JAVA中的char类型

    写在前面: 本周,在我们同学的刷题群里,一位同学上传了一道关于char的题,引起的不少同学的热议.热议的同时,我们也发现近乎一半的同学对char的基础知识一知半解,今天我们给大家一个浅显易懂的解释,赶 ...

最新文章

  1. 【OpenCV】cv::Mat和std::vector之间的相互转换
  2. winform改变控件的外形
  3. 一个Quake2的世界浏览器DEMO(附源码)
  4. SAP 财务模块 FI-TV 差旅管理
  5. Apache虚拟主机指南
  6. 要不要出去找一份实习?
  7. Media所有参数汇总
  8. java中软填空面试题,通过这9个Java面试题,就可以入职华为啦
  9. 汇编语言中常用指令对标志位寄存器的影响
  10. cf修复服务器,CF:“卡顿”问题终于得到重视!新版本宣布修复,玩家这下开心了...
  11. oracle协议适配器错误tns,ORA-12560: TNS: 协议适配器错误 常见原因
  12. React系列--jsx语法及虚拟dom,渲染
  13. Visual Studio里的BUG??
  14. 在二维码中间添加logo或者图片
  15. .NET发送邮箱(验证码)
  16. C语言写三子棋,冲冲冲!
  17. 人类像计算机一样思考 议论文,人工智能时代——人应像人一样思考作文800字...
  18. 人工智能与深度神经网络,人工智能深度神经网络
  19. 6款炫酷的HTML5 3D特效源码
  20. GAMES101第四讲Transformation Cont.笔记

热门文章

  1. 组件通信之pubsub
  2. libmysqld_dev linux,解决mysql安装mysqld doesn\'t exist or is not-鸟哥のlinux-ChinaUnix博客
  3. 精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务
  4. java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion
  5. ETL异构数据源Datax_数据准备_03
  6. ElasticSearch docker安装
  7. 解决:Error response from daemon: manifest for xxx:latest not found: manifest unknown...
  8. (需求实战_03)_shell脚本 sftp协议下载文件
  9. android studio 调用c++,android studio配置opencv,调用c++,处理图像
  10. 拼的html页面乱,页面分页html拼接