LeetCode_16.22兰顿蚂蚁
16.22. 兰顿蚂蚁
一只蚂蚁坐在由白色和黑色方格构成的无限网格上。开始时,网格全白,蚂蚁面向右侧。每行走一步,蚂蚁执行以下操作。
- 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并向前移动一个单位。
- 如果在黑色方格上,则翻转方格的颜色,向左(逆时针方向)转 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;}}}
资料
- LeetCode原题
- Android客户端演示Demo
- 演示效果
LeetCode_16.22兰顿蚂蚁相关推荐
- java兰顿蚂蚁解题思路_程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)
1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...
- 程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)
1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...
- 蓝桥杯 兰顿蚂蚁(模拟)
历届试题 兰顿蚂蚁 时间限制:1.0s 内存限制:256.0MB 问题描写叙述 兰顿蚂蚁.是于1986年,由克里斯·兰顿提出来的,属于细胞自己主动机的一种. 平面上的正方形格子被填上黑色或白色 ...
- [蓝桥杯][2014年第五届真题]兰顿蚂蚁(模拟)
题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...
- [蓝桥杯][2014年第五届真题]兰顿蚂蚁-模拟
题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...
- [Java] 蓝桥杯PREV-33 历届试题 兰顿蚂蚁
问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...
- 第五届蓝桥杯 软件类省赛真题 第八题:兰顿蚂蚁
标题:兰顿蚂蚁 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部 ...
- 历届试题 核桃的数量(3个数的最小公倍数),翻硬币(贪心),买不到的数目(在范围内暴力,找范围,最小公倍数是上界,最小的数是下界),兰顿蚂蚁(dfs,模拟)
历届试题 核桃的数量 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 各组的核桃数量必须相同 各组内必须能 ...
- 【菜鸟算题】兰顿蚂蚁
题目 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左右其 ...
- React 系列教程2:编写兰顿蚂蚁演示程序
简介 最早接触兰顿蚂蚁是在做参数化的时候,那时候只感觉好奇,以为是很复杂的东西.因无意中看到生命游戏的 React 实现,所以希望通过兰顿蚂蚁的例子再学习一下 React. 兰顿蚂蚁的规则非常简单: ...
最新文章
- R语言使用caret包中的createMultiFolds函数对机器学习数据集进行交叉验证抽样、返回的样本列表长度为k×times个、times为组内抽样次数
- GitHub率先消灭了cookies:与烦人的用户条款说再见
- 0 开发的准备工作一一虚拟机virturalbox
- Gartner APM 魔力象限技术解读——全量存储? No! 按需存储?YES!
- 清华大学计算机系男女,【清华大学男女比例】2016清华大学各院系男女比例
- 前端 input怎么显示null_小猿圈WEB前端之HTML5+CSS3面试题(一)
- ES6 async函数(超级详细、易懂)
- spark User class threw exception: java.lang.NoSuchMethodError
- 这几款好加密软件让你不再担心担心隐私泄露!
- 地图开发中用到的比例尺和分辨率
- java语言介绍及特点
- 英语邮件介绍多媒体计算机,多媒体电子邮件,rich media email,音标,读音,翻译,英文例句,英语词典...
- Es的mapping映射
- VHDL串口通信 在FPGA开发板上测试 并解决没有识别到下载接口USB_Blaster(No Hardware问题)
- python中的Numpy包
- 非负大整数加法---网易校招附加题
- Android视频 录制视频被拉伸解决方案
- java发邮件的代码
- redis热key监控
- 2019年计算机与软件技术资格 试题,2019下半年试题分析与解答(全国计算机技术与软件专业技术资格水平考试指定用书)...