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