681.最近的时间【String.format(“%02d:%02d“, hour, min);】

681.最近的时间

题目描述:

给出一个00:00到23:59的任意时间字符串s,输出可以由这四个数字的任意一个或多个构成的最近的下一个时间(字符串)。

例如:
(1)输入"00:00" 输出 “00:00”
(2)输入"22:47"输出"22:22" 22:47由2,4,7组成,最近的下一个时间是第二天的22:22,可以由其中的2组成。
(3)输入"22:35"输出"22:52" 22:35由2,3,5组成,最近的下一个时间是当天的22:52.


Java代码1:Brute fore

由于给的时间只到分钟,一天中有1440个分钟,也就是1440个时间点。
可以从当前时间点开始,遍历一天的1440个时间点,每到一个时间点,看其所有的数字是否在原时间点字符中存在。
如果不存在,直接break,然后开始遍历下一个时间点;
如果四个数字都存在,说明找到了,换算成题目的时间形式返回即可。
即 “22:35” 的下一个时间点是 “22:52” ,即 “22:52” 的数字组成 属于 “22:35”,如果不属于直接就break 进入下一个时间点。

class Solution {
    public String nextClosestTime(String time) {
        int hour = Integer.parseInt(time.substring(0, 2));
        int min = Integer.parseInt(time.substring(3, 5));
        while (true) {            
            if (++min == 60) {  //分钟一到60就进位。
                min = 0;
                ++hour;
                hour %= 24;
            }
            String curr = String.format("%02d:%02d", hour, min);
            Boolean valid = true;
            for (int i = 0; i < curr.length(); ++i) {
                //只要 遍历的时间中的字符 有一个不在输入time字符串中,即不是下一个时间点
				if (time.indexOf(curr.charAt(i)) < 0) {  
                    valid = false;
                    break;
                }
			}
            if (valid) return curr;
        }
    }
} 
给下面代码每一行给上注释并说明这段代码的意思#include "pch.h" #include "FinBudgetSupport.h" #include <map> time_t StringToDateTime(char* str) { tm tm_; int year, month, day, hour, min, sec; afxDump << str << "\n\n\n\n"; sscanf_s(str, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &min, &sec); tm_.tm_year = year - 1900; tm_.tm_mon = month - 1; tm_.tm_mday = day; tm_.tm_hour = hour; tm_.tm_min = min; tm_.tm_sec = sec; tm_.tm_isdst = -1; time_t t_ = mktime(&tm_); return t_; } CString DateTimeToString(time_t _time) { tm *_tm = new tm(); gmtime_s(_tm ,&_time); CString t_str; t_str.Format(_T("%d-%d-%d %d:%d:%d"), _tm->tm_year+1900, 1+_tm->tm_mon, _tm->tm_mday, _tm->tm_hour , _tm->tm_min, _tm->tm_sec); delete _tm; return t_str; } CString _toCString(double _value) { CString t_str; t_str.Format(_T("%lf"), _value); return t_str; } CString _toCString(int _value) { CString t_str; t_str.Format(_T("%d"), _value); return t_str; } double _toDouble(CString _str) { return _ttof(_str); } char* CStringToCharArray(CString str) { int str_len = WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), NULL, 0, NULL, NULL);//计算字节数 char* CharArray = new char[str_len + 1]; WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), CharArray, str_len, NULL, NULL); CharArray[str_len] = '\0'; return CharArray; } void SplitString(const std::string& s, std::vector<std::string>& v, const std::string& c) { std::string::size_type pos1, pos2; pos2 = s.find(c); pos1 = 0; while (std::string::npos != pos2) { v.push_back(s.substr(pos1, pos2 - pos1)); pos1 = pos2 + c.size(); pos2 = s.find(c, pos1); } if (pos1 != s.length()) v.push_back(s.substr(pos1)); }
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值