algorithm - 使用数字数组实现 "24 hour time"

标签 algorithm sorting

<分区>

我最近在考试中遇到了一道题。 我将获得一个由 4 个数字组成的数组,我必须使用它来构造最大可能的 24 小时时间格式。 例如:如果输入数组是 [1,3,5,2],答案将是“23:51”。 如果输入数组为 [1,1,5,0],则答案为“15:10”。

我尝试这样做并且确实成功了,但它非常初级。我基本上必须为时间的每个位置制作 4 个不同的数组,并与输入数组进行比较。

用任何语言(c、c#、objC 或任何其他语言)实现的不同方法会有很大帮助。我似乎无法理解我的逻辑。

最佳答案

只是想分享一个可行的解决方案。不一定有效。

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


public class Test {

    public static void main(String[] args) throws Exception {
        int[] input = {1,2,6,7};
        System.out.println(getLargestTime(input)+" is the largest time!");
    }

    public static String getLargestTime(int[] input) {
        String largestTime = "00:00";
        String str = input[0]+""+input[1]+""+input[2]+""+input[3];
        List<String> times = new ArrayList<>();
        permutation(str, times);
        Collections.sort(times, Collections.reverseOrder());
        for (String t: times) {
            int hours = Integer.parseInt(t) / 100;
            int minutes = Integer.parseInt(t) % 100;
            if (hours < 24 && minutes < 60) {
                if (hours < 10 && minutes < 10) {
                    largestTime = "0"+hours+":0"+minutes;
                } else if (hours < 10) {
                    largestTime = "0"+hours+":"+minutes;
                } else if (minutes < 10) {
                    largestTime = hours+":0"+minutes;
                } else {
                    largestTime = hours+":"+minutes;
                }               
            }
        }
        return largestTime;
    }

    public static void permutation(String str, List<String> list) { 
        permutation("", str, list); 
    }

    private static void permutation(String prefix, String str, List<String> list) {
        int n = str.length();
        if (n == 0) list.add(prefix);
        else {
            for (int i = 0; i < n; i++)
                permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n), list);
        }
    }

}

关于algorithm - 使用数字数组实现 "24 hour time",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40370551/

相关文章:

algorithm - Levenshtein与特定数字组的距离

php - 数组排序区分大小写

java - 如何拆分用户在java中输入时提供的字符串?

java - 如何针对较大的 n 值修复快速排序算法? (并且当数组不是随机的时)

c++ - 存储在 vector C++ 中的聚类点

c++ - 如何在C++中创建可变尺寸的网格?

ios - - iOS : Make a tree based on a JSON

c++ - 分配/访问二维数组,使得二维子 block 是连续的

c++ - 按多列对二维 vector 进行排序

javascript - Ember 对可枚举数组进行排序或向常规数组添加新对象