C++ 中的下一个最近时间
假设我们有一个以“HH:MM”格式表示的时间,我们需要通过重用当前数字来生成下一个最近的时间。我们可以无限次使用这些数字。
因此,如果输入类似于“19:34”,则输出将是“19:39”,因为从数字 1、9、3、4 中选择的最接近的时间是 19:39。它不是 19:33,因为这发生在 23 小时 59 分钟之后。
为了解决这个问题,我们将遵循以下步骤:
定义一个函数 eval(),它将接收 x,
a := 将 x[0] 转换为字符串
a := a + x[1]
b := 将 x[2] 转换为字符串
b := b + x[3]
返回 a 作为整数 * 60 + b 作为整数
从主方法执行以下操作:
ret := 空字符串
temp := 空字符串
diff := inf
定义一个数组 time
将 t[0] 插入到 time 的末尾
将 t[1] 插入到 time 的末尾
将 t[3] 插入到 time 的末尾
将 t[4] 插入到 time 的末尾
n := time 的大小
src := 空字符串
temp1 := 空字符串
temp2 := 空字符串
对于初始化 i := 0,当 i < n 时,更新(将 i 增加 1),执行:
src := src + time[i]
对于初始化 i := 0,当 i < n 时,更新(将 i 增加 1),执行:
对于初始化 j := 0,当 j < n 时,更新(将 j 增加 1),执行:
对于初始化 k := 0,当 k < n 时,更新(将 k 增加 1),执行:
对于初始化 l := 0,当 l < n 时,更新(将 l 增加 1),执行:
temp1 := time[i]
temp1 := temp1 + time[j]
temp2 := time[k]
temp2 := temp2 + time[l]
如果 temp1 作为数字 > 23 或 temp2 作为数字 > 59,则:
忽略以下部分,跳到下一次迭代
temp := temp1 + temp2
如果 temp 等于 src,则:
忽略以下部分,跳到下一次迭代
newDiff := eval(temp - eval(src))
如果 newDiff < 0,则:
newDiff := newDiff + (60 * 24)
如果 newDiff < diff,则:
diff := newDiff
ret := temp1 + ":" + temp2
返回(如果 ret 的大小等于 0,则返回 t,否则返回 ret)
示例
让我们看看以下实现以更好地理解:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int eval(string x){
string a = to_string(x[0]);
a += x[1];
string b = to_string(x[2]);
b += x[3];
return stoi(a) * 60 + stoi(b);
}
string nextClosestTime(string t) {
string ret = "";
string temp = "";
int diff = INT_MAX;
vector<char> time;
time.push_back(t[0]);
time.push_back(t[1]);
time.push_back(t[3]);
time.push_back(t[4]);
int n = time.size();
string src = "";
string temp1 = "";
string temp2 = "";
for (int i = 0; i < n; i++)
src += time[i];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
for (int l = 0; l < n; l++) {
temp1 = time[i];
temp1 += time[j];
temp2 = time[k];
temp2 += time[l];
if (stoi(temp1) > 23 || stoi(temp2) > 59)
continue;
temp = temp1 + temp2;
if (temp == src)
continue;
int newDiff = eval(temp) - eval(src);
if (newDiff < 0)
newDiff += (60 * 24);
if (newDiff < diff) {
diff = newDiff;
ret = temp1 + ":" + temp2;
}
}
}
}
}
return ret.size() == 0 ? t : ret;
}
};
main(){
Solution ob;
cout<<(ob.nextClosestTime("19:34"));
}输入
"19:34"
输出
19:39
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP