zoukankan      html  css  js  c++  java
  • 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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

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

  • 相关阅读:
    [Erlang 0106] Erlang实现Apple Push Notifications消息推送
    一场推理的盛宴
    [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集
    [Erlang 0104] 当Erlang遇到Solr
    [Erlang 0103] Erlang Resources 资讯小站
    history.go(-1)和History.back()的区别
    [Java代码] Java用pinyin4j根据汉语获取各种格式和需求的拼音
    spring中context:property-placeholder/元素
    Java中的异常处理:何时抛出异常,何时捕获异常?
    用Jersey构建RESTful服务1--HelloWorld
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/11080708.html
Copyright © 2011-2022 走看看