题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int size = in.nextInt();
String command = in.next();
String[] commands = command.split("");
List<Integer> screen = new ArrayList<>();
int screenSize = size;
if (size > 4) {
screenSize = 4;
}
//初始屏幕
for (int i = 1; i <= screenSize; i++) {
screen.add(i);
}
getResult(1, size, screen, commands);
}
}
private static void getResult(int location, int size, List<Integer> screen,
String[] commands) {
for (String c : commands) {
//光标上移
if (c.equals("U")) {
//光标在当前屏幕第一首
if (screen.indexOf(location) == 0) {
//光标在第一页第一首
if (location == 1) {
//光标移动到最后一页最后一首
location = size;
//切换到最后一页屏幕
screen = lastScreen(screen.size(), size);
} else {
//光标上移一位
location--;
//屏幕向上滑动
screen = updateScreen(screen, c, size);
}
} else {
//光标上移一位
location--;
}
}
//光标下移
if (c.equals("D")) {
//光标在最后一首
if (screen.indexOf(location) == screen.size()-1) {
//光标在最后一页最后一首
if (location == size) {
//光标移动到第一页第一首
location = 1;
//切换到第一页屏幕
screen = firstScreen(screen.size());
} else {
//光标下移一位
location++;
//屏幕向下滑动
screen = updateScreen(screen, c, size);
}
} else {
//光标下移一位
location++;
}
}
}
for (Integer s : screen) {
System.out.print(s + " ");
}
System.out.println();
System.out.println(location);
}
private static List<Integer> updateScreen(List<Integer> screen, String command,
int size) {
//屏幕向上滑动
if (command.equals("U")) {
for (int i = 0; i < screen.size(); i++) {
screen.set(i, screen.get(i) - 1);
}
}
//屏幕向下滑动
if (command.equals("D")) {
for (int i = 0; i < screen.size(); i++) {
screen.set(i, screen.get(i) + 1);
}
}
return screen;
}
private static List<Integer> firstScreen(int size) {
List<Integer> firstScreen = new ArrayList<>();
//生成第一页屏幕
for (int i = 1; i <= size; i++) {
firstScreen.add(i);
}
return firstScreen;
}
private static List<Integer> lastScreen(int size, int max) {
List<Integer> lastScreen = new ArrayList<>();
//生成最后一页屏幕
for (int i = 1; i <= size; i++) {
lastScreen.add(max - size + i);
}
return lastScreen;
}
}
查看6道真题和解析