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


#字节跳动##笔试题目#
全部评论
这么长。。。
点赞 回复 分享
发布于 2019-08-25 21:32

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务