C ++中给定数字最多的时间
假设我们有一个由4位数字组成的数组,那么我们必须找到最大的24小时制时间。我们知道最小的24小时时间是00:00,最大的时间是23:59。从00:00开始,如果自午夜起经过了更多时间,则时间会更大。我们必须以长度为5的字符串形式返回答案。如果没有有效的时间要返回,则返回一个空字符串。
因此,如果输入类似于[1,2,3,4],则输出将为“ 23:41”
为了解决这个问题,我们将遵循以下步骤-
定义一个函数
isValid()
,它将使用字符串a,如果a [0]>'2',则-
返回假
如果a [0]与'2'相同且a [1]>'3',则-
返回假
如果a [3]>'5',则-
返回假
返回真
定义一个函数
dfs()
,它将采用数组A,res,cur,如果cur的大小等于5,则-
RES:=当前
如果isValid(cur)且cur> res,则-
返回
对于初始化i:= 0,当i <4时,更新(将i增加1),请执行-
tmp:= A [i]
cur:= cur + A [i] + ASCII的'0'
如果cur的大小等于2,则-
A [i]:= -1
dfs(A,res,cur)
A [i]:= tmp
从cur删除最后一个元素
如果cur的大小等于2,则-
cur:= cur连接到':'
从cur删除最后一个元素
如果A [i]不等于-1,则-
从主要方法中执行以下操作-
res:=空字符串,tmp:=空字符串
dfs(A,res,tmp)
返回资源
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>using namespace std;
class Solution {
public:
void dfs(vector<int>& A, string& res, string& cur) {
if (cur.size() == 5) {
if (isValid(cur) && cur > res)
res = cur;
return;
}
for (int i = 0; i < 4; ++i) {
if (A[i] != -1) {
int tmp = A[i];
cur += A[i] + '0';
if (cur.size() == 2)
cur += ':';
A[i] = -1;
dfs(A, res, cur);
A[i] = tmp;
cur.pop_back();
if (cur.size() == 2)
cur.pop_back();
}
}
}
bool isValid(const string a) {
if (a[0] > '2')
return false;
if (a[0] == '2' && a[1] > '3')
return false;
if (a[3] > '5')
return false;
return true;
}
string largestTimeFromDigits(vector<int>& A) {
string res = "", tmp = "";
dfs(A, res, tmp);
return res;
}
};
main(){
Solution ob;
vector<int> v = {1,2,3,4};
cout << (ob.largestTimeFromDigits(v));
}
输入值
{1,2,3,4}
输出结果
23:41
以上是 C ++中给定数字最多的时间 的全部内容, 来源链接: utcz.com/z/322354.html