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