16.22. 兰顿蚂蚁

一只蚂蚁坐在由白色和黑色方格构成的无限网格上。开始时,网格全白,蚂蚁面向右侧。每行走一步,蚂蚁执行以下操作。

  1. 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并向前移动一个单位。
  2. 如果在黑色方格上,则翻转方格的颜色,向左(逆时针方向)转 90 度,并向前移动一个单位。

编写程序来模拟蚂蚁执行的前 K 个动作,并返回最终的网格。

网格由数组表示,每个元素是一个字符串,代表网格中的一行,黑色方格由 ‘X’ 表示,白色方格由 ‘_’ 表示,蚂蚁所在的位置由 ‘L’, ‘U’, ‘R’, ‘D’ 表示,分别表示蚂蚁 左、上、右、下 的朝向。只需要返回能够包含蚂蚁走过的所有方格的最小矩形,如果当前位置是蚂蚁所在位置,则用蚂蚁方向代替方格颜色。

示例 1:

输入:0

输出:[“R”]

示例 2:

输入:2

输出:["_X", “LX”]

示例 3:

输入:5

输出:[
“_U”,
“X_”,
“XX”
]

提示:

  • K <= 100000

答案一

class Solution {// 白色方格private final int WHITE = 0;// 黑色方格private final int BLACK = 1;private static final int ANT_LEFT = 'L';private static final int ANT_TOP = 'U';private static final int ANT_RIGHT = 'R';private static final int ANT_BOTTOM = 'D';int size = 10000;// 当前蚂蚁处于表格中的下标int currentX = size / 2;int currentY = size / 2;// 当前蚂蚁头方向int currentDir = ANT_RIGHT;// 蚂蚁走过的表格下标最值int minX = currentX, maxX = currentX, minY = currentY, maxY = currentY;//保存黑色网格Set<String> blackSet = new HashSet<String>();private String getKey(int x, int y) {return String.valueOf(x) + y;}public List<String> printKMoves(int K) {for (int i = 0; i < K; i++) {next();}List<String> list = new ArrayList<String>();for (int j = minY; j <= maxY; j++) {StringBuilder sBuilder = new StringBuilder();for (int i = minX; i <= maxX; i++) {if (i == currentX && j == currentY) {sBuilder.append((char) currentDir);} else {sBuilder.append(blackSet.contains(getKey(i, j)) ? "X" : "_");}}list.add(sBuilder.toString());}return list;}private void next() {int lastX = currentX;int lastY = currentY;if (!blackSet.contains(getKey(currentX, currentY))) {switch (currentDir) {case ANT_LEFT:currentY = currentY - 1;currentDir = ANT_TOP;break;case ANT_TOP:currentX = currentX + 1;currentDir = ANT_RIGHT;break;case ANT_RIGHT:currentY = currentY + 1;currentDir = ANT_BOTTOM;break;case ANT_BOTTOM:currentX = currentX - 1;currentDir = ANT_LEFT;break;default:}} else {switch (currentDir) {case ANT_LEFT:currentY = currentY + 1;currentDir = ANT_BOTTOM;break;case ANT_TOP:currentX = currentX - 1;currentDir = ANT_LEFT;break;case ANT_RIGHT:currentY = currentY - 1;currentDir = ANT_TOP;break;case ANT_BOTTOM:currentX = currentX + 1;currentDir = ANT_RIGHT;break;default:}}if (!blackSet.contains(getKey(lastX, lastY))) {blackSet.add(getKey(lastX, lastY));} else {blackSet.remove(getKey(lastX, lastY));}if (minX > currentX) {minX = currentX;}if (maxX < currentX) {maxX = currentX;}if (minY > currentY) {minY = currentY;}if (maxY < currentY) {maxY = currentY;}}}

资料

  1. LeetCode原题
  2. Android客户端演示Demo
  3. 演示效果

LeetCode_16.22兰顿蚂蚁相关推荐

  1. java兰顿蚂蚁解题思路_程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)

    1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...

  2. 程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)

    1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...

  3. 蓝桥杯 兰顿蚂蚁(模拟)

    历届试题 兰顿蚂蚁   时间限制:1.0s   内存限制:256.0MB 问题描写叙述 兰顿蚂蚁.是于1986年,由克里斯·兰顿提出来的,属于细胞自己主动机的一种. 平面上的正方形格子被填上黑色或白色 ...

  4. [蓝桥杯][2014年第五届真题]兰顿蚂蚁(模拟)

    题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...

  5. [蓝桥杯][2014年第五届真题]兰顿蚂蚁-模拟

    题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...

  6. [Java] 蓝桥杯PREV-33 历届试题 兰顿蚂蚁

    问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...

  7. 第五届蓝桥杯 软件类省赛真题 第八题:兰顿蚂蚁

    标题:兰顿蚂蚁 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁".     蚂蚁的头部 ...

  8. 历届试题 核桃的数量(3个数的最小公倍数),翻硬币(贪心),买不到的数目(在范围内暴力,找范围,最小公倍数是上界,最小的数是下界),兰顿蚂蚁(dfs,模拟)

    历届试题 核桃的数量 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 各组的核桃数量必须相同 各组内必须能 ...

  9. 【菜鸟算题】兰顿蚂蚁

    题目 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左右其 ...

  10. React 系列教程2:编写兰顿蚂蚁演示程序

    简介 最早接触兰顿蚂蚁是在做参数化的时候,那时候只感觉好奇,以为是很复杂的东西.因无意中看到生命游戏的 React 实现,所以希望通过兰顿蚂蚁的例子再学习一下 React. 兰顿蚂蚁的规则非常简单: ...

最新文章

  1. R语言使用caret包中的createMultiFolds函数对机器学习数据集进行交叉验证抽样、返回的样本列表长度为k×times个、times为组内抽样次数
  2. GitHub率先消灭了cookies:与烦人的用户条款说再见
  3. 0 开发的准备工作一一虚拟机virturalbox
  4. Gartner APM 魔力象限技术解读——全量存储? No! 按需存储?YES!
  5. 清华大学计算机系男女,【清华大学男女比例】2016清华大学各院系男女比例
  6. 前端 input怎么显示null_小猿圈WEB前端之HTML5+CSS3面试题(一)
  7. ES6 async函数(超级详细、易懂)
  8. spark User class threw exception: java.lang.NoSuchMethodError
  9. 这几款好加密软件让你不再担心担心隐私泄露!
  10. 地图开发中用到的比例尺和分辨率
  11. java语言介绍及特点
  12. 英语邮件介绍多媒体计算机,多媒体电子邮件,rich media email,音标,读音,翻译,英文例句,英语词典...
  13. Es的mapping映射
  14. VHDL串口通信 在FPGA开发板上测试 并解决没有识别到下载接口USB_Blaster(No Hardware问题)
  15. python中的Numpy包
  16. 非负大整数加法---网易校招附加题
  17. Android视频 录制视频被拉伸解决方案
  18. java发邮件的代码
  19. redis热key监控
  20. 2019年计算机与软件技术资格 试题,2019下半年试题分析与解答(全国计算机技术与软件专业技术资格水平考试指定用书)...

热门文章

  1. mysql数据库导入导出sql文件
  2. 路由模式 -- ADSL账号密码拨号
  3. 嵌入式Linux学习笔记(1)开篇
  4. Windows定时开机 命令 自动开机
  5. java虚拟机 什么语言_Java虚拟机是用什么语言写的?
  6. 在VS中查看Halcon变量
  7. Java快逸报表展现demo_快逸报表操作积累.docx
  8. 悬镜安全宣布完成数千万元Pre-A轮融资
  9. 数据分析:销售数据怎么分析?简单概述
  10. [置顶] 原来JAVA对象转JSON格式的字符串如此简单,返回来暂时不会做,留下纪念下