今日头条 第三题 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]); } } }