资讯专栏INFORMATION COLUMN

[LeetCode] 681. Next Closest Time

gaomysion / 1181人阅读

摘要:找到所有可用的数,排序后存起来从右到左对进行操作,只要有当前最小单位时间的替换,返回替换后的时间找到的位置,然后加得到下一个位置如果下一个位置的数还是原来的数,或者超过了上限数,前进到再下一个

Problem

Given a time represented in the format "HH:MM", form the next closest time by reusing the current digits. There is no limit on how many times a digit can be reused.

You may assume the given input string is always valid. For example, "01:34", "12:09" are all valid. "1:34", "12:9" are all invalid.

Example 1:

Input: "19:34"
Output: "19:39"
Explanation: The next closest time choosing from digits 1, 9, 3, 4, is 19:39, which occurs 5 minutes later. It is not 19:33, because this occurs 23 hours and 59 minutes later.
Example 2:

Input: "23:59"
Output: "22:22"
Explanation: The next closest time choosing from digits 2, 3, 5, 9, is 22:22. It may be assumed that the returned time is next day"s time since it is smaller than the input time numerically.

Solution
class Solution {
    public String nextClosestTime(String time) {
        char[] res = time.toCharArray();
        //找到所有可用的数,排序后存起来
        char[] digits = new char[]{res[0], res[1], res[3], res[4]};
        Arrays.sort(digits);
        
        //从右到左对res进行操作,只要有当前最小单位时间的替换,返回替换后的时间
        res[4] = findNext(digits, res[4], "9");
        if (res[4] > time.charAt(4)) return String.valueOf(res);
        res[3] = findNext(digits, res[3], "5");
        if (res[3] > time.charAt(3)) return String.valueOf(res);
        res[1] = res[0] == "2" ? findNext(digits, res[1], "3") : findNext(digits, res[1], "9");
        if (res[1] > time.charAt(1)) return String.valueOf(res);
        res[0] = findNext(digits, res[0], "2");
        return String.valueOf(res);
    }
    private char findNext(char[] digits, char cur, char upper) {
        if (cur == upper) return digits[0];
        //找到cur的位置,然后加1得到下一个位置
        int pos = Arrays.binarySearch(digits, cur)+1;
        //如果下一个位置的数还是原来的数,或者超过了上限数,前进到再下一个
        while (pos < 4 && (digits[pos] == cur || digits[pos] > upper)) pos++;
        return pos == 4 ? digits[0] : digits[pos];
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71961.html

相关文章

  • [Leetcode] Closest Binary Search Tree Value 最近二叉搜索

    摘要:递归法复杂度时间空间思路根据二叉树的性质,我们知道当遍历到某个根节点时,最近的那个节点要么是在子树里面,要么就是根节点本身。因为我们知道离目标数最接近的数肯定在二叉搜索的路径上。 Closest Binary Search Tree Value I Given a non-empty binary search tree and a target value, find the va...

    AlphaWallet 评论0 收藏0
  • LeetCode 272 Closest Binary Tree Traversal II 解题思路

    摘要:原题网址题意在二叉搜索树当中找到离最近的个数。解题思路由于二叉搜索数的中序遍历是有序的,比如例子中的树,中序遍历为。 原题网址:https://leetcode.com/problems... Given a non-empty binary search tree and a target value, find k values in the BST that are closes...

    Youngdze 评论0 收藏0
  • [LintCode/LeetCode] 3Sum Closest

    摘要:这个题和的做法基本一样,只要在循环内计算和最接近的和,并赋值更新返回值即可。 Problem Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three intege...

    ShevaKuilin 评论0 收藏0
  • leetcode 部分解答索引(持续更新~)

    摘要:前言从开始写相关的博客到现在也蛮多篇了。而且当时也没有按顺序写现在翻起来觉得蛮乱的。可能大家看着也非常不方便。所以在这里做个索引嘻嘻。顺序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 从开始写leetcode相关的博客到现在也蛮多篇了。而且当时也没有按顺序写~现在翻起来觉得蛮乱的。可能大家看着也非常不方便。所以在这里做个索引嘻嘻。 顺序整理 1~50 1...

    leo108 评论0 收藏0
  • [LeetCode] 849. Maximize Distance to Closest Perso

    Problem In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is empty. There is at least one empty seat, and at least one person sitting. Alex wants to sit in...

    JerryC 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<