标签:10 string 22 shu1 最近 time 时刻 LeetCode
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-closest-time
给定一个形如 “HH:MM” 表示的时刻,利用当前出现过的数字构造下一个距离当前时间最近的时刻。每个出现数字都可以被无限次使用。
你可以认为给定的字符串一定是合法的。例如,“01:34” 和 “12:09” 是合法的,“1:34” 和 “12:9” 是不合法的。
样例 1:
输入: “19:34”
输出: “19:39”
解释: 利用数字 1, 9, 3, 4 构造出来的最近时刻是 19:39,是 5 分钟之后。结果不是 19:33 因为这个时刻是 23 小时 59 分钟之后。
样例 2:
输入: “23:59”
输出: “22:22”
解释: 利用数字 2, 3, 5, 9 构造出来的最近时刻是 22:22。 答案一定是第二天的某一时刻,所以选择可构造的最小时刻。
思路:四个位置最大就是9^4种情况,抛去不存在的数字,直接四层循环枚举即可,用当前得到的四个数,减去所给的四个数,找最小的,但要注意第二天的情况,如11:11,第二天的情况也是11:11,此时枚举到的减去所给的等于0(也可能小于零),直接加上2460,即到达第二天的时间。取最小即可
class Solution {
public:
int i, j, k, l, sj, shu = 10000000, shu1;
int num1, num2, num3, num4, num, ans1, ans2;
string s;
bool f[20];
string nextClosestTime(string time) {
num1 = time[0] - '0';
num2 = time[1] - '0';
num3 = time[3] - '0';
num4 = time[4] - '0';
num = num1*1000 + num2*100 + num3*10 + num4;
// return to_string(num);
f[num1] = true;
f[num2] = true;
f[num3] = true;
f[num4] = true;
for (i = 0; i <= 2; i++){
if (f[i]){
for (j = 0; j <= 9; j++){
if (f[j] && (i * 10 + j < 24)){
for (k = 0; k <= 5; k++){
if (f[k]){
for (l = 0; l <=9; l++){
if (f[l]){
sj = i*1000 + j*100 + k*10 + l;
shu1 = sj - num;
if (shu1 <= 0)
shu1 += 2460;
if (shu1 < shu){
shu = shu1;
ans1 = i*10 + j;
ans2 = k*10 + l;
}
}
}
}
}
}
}
}
}
if (ans1 < 10)
s = "0";
s += to_string(ans1);
s += ":";
if (ans2 < 10)
s += "0";
s += to_string(ans2);
return s;
}
};
标签:10,string,22,shu1,最近,time,时刻,LeetCode 来源: https://blog.csdn.net/qq_45090349/article/details/120595668
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。