首页 > 解决方案 > foob​​ar.withgoogle.com 任务请传递编码消息 java

问题描述

我正在处理 foobar.withgoogle 任务“请传递编码消息”,我在计算机上对每个可能的数字进行了正确计算,但 foobar 打印“测试 5 失败 [隐藏]”这个隐藏测试意味着什么?请你帮助我好吗?

我的结果:

验证解决方案...

测试1通过!

测试2通过!

测试3通过![隐]

测试4通过![隐]

测试 5 失败 [隐藏]

请传递编码消息

您需要将消息传递给兔子工人,但为了避免被发现,您同意使用的代码是……至少可以说是晦涩难懂的。兔子在标准发行的盘子上获得食物,这些盘子上印有数字 0-9,以便于分类,您需要组合成组的盘子以在代码中创建数字。数字是代码的一部分的信号是它可以被 3 整除。您可以轻松地处理 15 和 45 等较小的数字,但 144 和 414 等较大的数字有点棘手。编写一个程序来帮助自己快速创建大量用于代码的数字,给定有限数量的板可以使用。

你有 L,一个包含一些数字(0 到 9)的列表。编写一个函数solution(L),找出可以由这些数字中的部分或全部数字组成且能被3 整除的最大数。如果不可能得到这样的数字,则返回0 作为解。L 将包含 1 到 9 位数字。同一个数字可能在列表中出现多次,但列表中的每个元素只能使用一次。

语言

要提供 Java 解决方案,请编辑 Solution.java 要提供 Python 解决方案,请编辑 solution.py

测试用例

您的代码应通过以下测试用例。请注意,它也可能针对此处未显示的隐藏测试用例运行。

-- Java 案例 -- 输入:Solution.solution({3, 1, 4, 1}) 输出:4311

输入:Solution.solution({3, 1, 4, 1, 5, 9}) 输出:94311

-- Python 案例 -- 输入:solution.solution([3, 1, 4, 1]) 输出:4311

输入:solution.solution([3, 1, 4, 1, 5, 9]) 输出:94311

使用 verify [file] 来测试您的解决方案并查看它的效果。完成代码编辑后,使用 submit [file] 提交您的答案。如果您的解决方案通过了测试用例,它将从您的主文件夹中删除。

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class Solution {
   public static int solution(int[] l) {
        List<Integer> initList = new ArrayList<>();
        List<Integer> resList = new ArrayList<>();

        Queue<Integer> rem0queue = new LinkedList<>();
        Queue<Integer> rem1queue = new LinkedList<>();
        Queue<Integer> rem2queue = new LinkedList<>();

        StringBuilder sbResult = new StringBuilder();
        int result = 0, sum = 0, rem;

        for(int x: l){
            if(x < 0) return result;
            initList.add(x);
        }

        Collections.sort(initList);
        //System.out.println(initList);

        for(int y: initList) {
            sum += y;
            if((y % 3) == 0) rem0queue.add(y);
            else if((y % 3) == 1) rem1queue.add(y);
            else rem2queue.add(y);
        }

        if(sum == 0) return result;
        rem = sum % 3;



        switch (rem) {
            case 0:
                resList.addAll(rem0queue);
                resList.addAll(rem1queue);
                resList.addAll(rem2queue);
                resList.sort(Collections.reverseOrder());

                for(int x: resList) sbResult.append(x);
                result = Integer.parseInt(sbResult.toString());
                break;

            case 1:
                if(!rem1queue.isEmpty()) rem1queue.remove();
                else {
                    if(!rem2queue.isEmpty()) rem2queue.remove();
                    if(!rem2queue.isEmpty()) rem2queue.remove();
                }
                resList.addAll(rem1queue);
                resList.addAll(rem2queue);
                resList.addAll(rem0queue);
                resList.sort(Collections.reverseOrder());

                for(int x: resList) sbResult.append(x);
                //if((Integer.parseInt(sbResult.toString())) % 3 != 0) return result;
                result = Integer.parseInt(sbResult.toString());
                break;

            case 2:
                if(!rem2queue.isEmpty()) rem2queue.remove();
                else {
                    if(!rem1queue.isEmpty()) rem1queue.remove();
                    if(!rem1queue.isEmpty()) rem1queue.remove();
                }
                resList.addAll(rem2queue);
                resList.addAll(rem1queue);
                resList.addAll(rem0queue);
                resList.sort(Collections.reverseOrder());

                for(int x: resList) sbResult.append(x);
                //if((Integer.parseInt(sbResult.toString())) % 3 != 0) return result;
                result = Integer.parseInt(sbResult.toString());
                break;
        }


        //System.out.println("Sum of digits " + sum + "\n" + "Rem num " + rem + "\n"+ "Result num " + sbResult);

        return result;
    }
}
    

标签: java

解决方案


例如尝试输入数组 {5} 或 {5, 5}


推荐阅读