• LeetCode.949-给定数字的最大时间(Largest Time for Given Digits)


    这是悦乐书的第363次更新,第391篇原创

    01 看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第225题(顺位题号是949)。给定4个整数组成的数组,返回最大的24小时时间。

    最小的24小时时间是00:00,最大的是23:59。 从00:00开始,如果从午夜开始经过更多时间,则时间会更长。

    将答案作为长度为5的字符串返回。如果无法生成有效时间,则返回空字符串。例如:

    输入:[1,2,3,4]
    输出:“23:41”

    输入:[5,5,5,5]
    输出:“”

    注意

    • A.length == 4

    • 0 <= A [i] <= 9

    02 第一种解法

    根据排列组合,使用三层循环,将每一种情况都算出来,组成一个24小时时间的字符串,然后判断是否符合24小时时间制,并且判断是否比已经算出的最大时间还大,最后返回最大的时间即可。

    使用三层循环的时候,可以得到三个数,剩下的那个数在数组A中索引为6-i-j-k,因为四个数的索引只能是0,1,2,3四个,已经知道其中三个,剩下那个用和做减法即可得到。另外,比较时间字符串的大小用的是compareTo方法。

    public String largestTimeFromDigits(int[] A) {
        String result = "";
        for (int i=0; i<4; i++) {
            for (int j=0; j<4; j++) {
                for (int k=0; k<4; k++) {
                    if (i == j || j == k || i == k) {
                        continue;
                    }
                    String hour = A[i] + "" + A[j];
                    String minute = A[k] + "" +A[6-i-j-k];
                    String time = hour + ":" + minute;
                    if (hour.compareTo("24") < 0 && minute.compareTo("60") < 0
                            && time.compareTo(result) > 0) {
                        result = time;
                    }
                }
            }
        }
        return result;
    }
    

    03 第二种解法

    思路和上面一样,依旧是将所有可能的情况列出来,然后将有效的时间换成分钟数来表示,找出最大值,最后再转成字符串输出即可。

    public String largestTimeFromDigits2(int[] A) {
        int ans = -1;
        for (int i = 0; i < 4; ++i) {
            for (int j = 0; j < 4; ++j) {
                for (int k = 0; k < 4; ++k) {
                    if (i == j || j == k || i == k) {
                        continue;
                    }
                    int hours = 10 * A[i] + A[j];
                    int mins = 10 * A[k] + A[6 - i - j - k];
                    if (hours < 24 && mins < 60) {
                        ans = Math.max(ans, hours * 60 + mins);
                    }
                }
            }
        }
        return ans == -1 ? "" : String.format("%02d:%02d", ans/60, ans%60);
    }
    

    04 小结

    算法专题目前已连续日更超过七个月,算法题文章231+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

  • 相关阅读:
    高级(线性)素数筛
    Dijkstra(迪杰斯特拉)算法
    简单素数筛
    【解题报告】 POJ1958 奇怪的汉诺塔(Strange Tower of Hanoi)
    4 jQuery Chatting Plugins | jQuery UI Chatbox Plugin Examples Like Facebook, Gmail
    Web User Control Collection data is not storing
    How to turn on IE9 Compatibility View programmatically in Javascript
    从Javascrip 脚本中执行.exe 文件
    HtmlEditorExtender Ajax
    GRIDVIEW模板中查找控件的方式JAVASCRIPT
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/11080708.html
Copyright © 2020-2023  润新知