今日头条 第三题 2048
代码有点乱,凑合看吧
package cn.toutiao;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
public class S3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] sq = new int[4][4];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
sq[i][j] = sc.nextInt();
}
}
move(sq, n);
print(sq);
}
private static void move(int[][] sq, int pos) {
if (pos == 1 || pos == 2) {
// 向上
doColumn(sq, pos, 0);
doColumn(sq, pos, 1);
doColumn(sq, pos, 2);
doColumn(sq, pos, 3);
}
if (pos == 3 || pos == 4) {
doRow(sq, pos, 0);
doRow(sq, pos, 1);
doRow(sq, pos, 2);
doRow(sq, pos, 3);
}
}
private static int[][] doColumn(int[][] sq, int pos, int colid) {
Deque<Integer> quene = new LinkedList<>();
if (pos == 1) { // 向上
int idx = 0;
while (idx < 4) {
int current = sq[idx][colid];
if (quene.isEmpty() && current != 0) {
quene.add(current);
} else if (current != 0){
int quend = quene.getLast();
if (quend == current && current != 0) {
quene.removeLast();
quene.add(quend + current);
} else if (current != 0){
quene.add(current);
}
}
idx++;
}
idx = 0;
while (idx < 4) {
sq[idx][colid] = 0;
idx++;
}
idx = 0;
while (!quene.isEmpty()) {
sq[idx][colid] = quene.poll();
idx++;
}
return sq;
}
if (pos == 2) { // 下
int idx = 3;
while (idx >= 0) {
int current = sq[idx][colid];
if (quene.isEmpty() && current != 0) {
quene.add(current);
} else if (current != 0){
int quend = quene.getLast();
if (quend == current && current != 0) {
quene.removeLast();
quene.add(quend + current);
} else if (current != 0){
quene.add(current);
}
}
idx--;
}
idx = 3;
while (idx >= 0) {
sq[idx][colid] = 0;
idx--;
}
idx = 3;
while (!quene.isEmpty()) {
sq[idx][colid] = quene.poll();
idx--;
}
return sq;
}
return null;
}
private static int[][] doRow(int[][] sq, int pos, int colid) {
Deque<Integer> quene = new LinkedList<>();
if (pos == 3) { // 向左
int idx = 0;
int lastMerge = 0;
while (idx < 4) {
int current = sq[colid][idx];
if (quene.isEmpty() && current != 0) {
quene.add(current);
} else if (current != 0){
int quend = quene.getLast();
if (quend == current && current != 0 && lastMerge != current) {
quene.removeLast();
quene.add(quend + current);
lastMerge = quend + current;
} else if (current != 0){
quene.add(current);
}
}
idx++;
}
idx = 0;
while (idx < 4) {
sq[colid][idx] = 0;
idx++;
}
idx = 0;
while (!quene.isEmpty()) {
sq[colid][idx] = quene.poll();
idx++;
}
return sq;
}
if (pos == 4) { // 下
int idx = 3;
int lastMerge = 0;
while (idx >= 0) {
int current = sq[colid][idx];
if (quene.isEmpty() && current != 0) {
quene.add(current);
} else if (current != 0){
int quend = quene.getLast();
if (quend == current && current != 0 && lastMerge != current) {
quene.removeLast();
quene.add(quend + current);
lastMerge = quend + current;
} else if (current != 0){
quene.add(current);
}
}
idx--;
}
idx = 3;
while (idx >= 0) {
sq[colid][idx] = 0;
idx--;
}
idx = 3;
while (!quene.isEmpty()) {
sq[colid][idx] = quene.poll();
idx--;
}
return sq;
}
return null;
}
private static void print(int[][] sq) {
for (int i = 0; i < 4; i++) {
System.out.println(sq[i][0] + " " + sq[i][1] + " " + sq[i][2] + " " + sq[i][3]);
}
}
} 

深信服公司福利 762人发布