1881. 飞机座位
描述
您的任务是为四口之家尽可能多的分配座位。一个四口之家必须占领一排当中连续的四个座位。过道上的座位(例如2C和2D)不被认为是彼此相邻的。一家人被过道分开是可以的,但在这种情况下必须每一边坐两个。显然,座位不可以分配给一个以上的家庭。
编写一个函数
class Solution {public int solution(int N,String S};
函数中N表示有N排座位,S表示已经提供出去的座位,函数返回剩下的座位能坐四口之家的最大值。例如, N = 2,S = '1A 2F 1C’,你的函数应该返回2.下图给出了做法。 当N = 1, S = “”(空字符串),你的函数应该返回2,因为我们最多可以提供2个四口之家的座位在一排空座位中,例如下图。
N是在[1,50]内的整数;字符串S由有效的座位名称组成,并用单个空格分隔;每个座位号最多在字符串S中出现一次。
样例 1:
输入:
N = 2,S = "1A 2F 1C"
输出:
2
样例 2:
输入:
N = 1,S = ""
输出:
2
原题传送门
文章目录
1881. 飞机座位描述样例 1:样例 2:
题解最后说两句声明
题解
public class Solution {
public int solution(int N
, String S
) {
if (S
.isEmpty()) {
return N
* 2;
}
boolean[][] seats
= new boolean[N
][10];
for (String seat
: S
.split("\\s")) {
int row
= Integer
.parseInt(seat
.substring(0, seat
.length() - 1)) - 1;
int col
= seat
.charAt(seat
.length() - 1) - 'A';
seats
[row
][col
] = true;
}
int ret
= 0;
for (int i
= 0; i
< N
; i
++) {
boolean way1
= true;
boolean way2
= false;
boolean way3
= false;
for (int j
= 1; j
< 5; j
++) {
if (seats
[i
][j
] == true) {
way1
= false;
break;
}
}
if (!way1
) {
way2
= true;
for (int j
= 3; j
< 7; j
++) {
if (seats
[i
][j
] == true) {
way2
= false;
break;
}
}
}
if (!way2
) {
way3
= true;
for (int j
= 5; j
< 9; j
++) {
if (seats
[i
][j
] == true) {
way3
= false;
break;
}
}
}
if (way1
) {
ret
++;
}
if (way2
) {
ret
++;
}
if (way3
) {
ret
++;
}
}
return ret
;
}
}
最后说两句
非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~
作者水平有限,如果文章内容有不准确的地方,请指正。
希望小伙伴们都能每天进步一点点。
声明
本文由二当家的白帽子博客原创,转载请注明来源,谢谢~