Leetcode上有这个问题,问题的链接是:https://leetcode.com/problems/largest-time-for-given-digits/
我已经为这个问题编写了代码,根据我的说法,我的代码是正确的,但是我的代码仍未通过所有测试用例,因此我不得不调试代码中的问题所在。
有人可以帮我吗?
class Solution {
public:
bool isValid(string s){
if(s[0] > '2') return false;
if(s[0] == '2'){
if(s[1] >= '4'){
return false ;
}
}
if(s[2] >=6) return false ;
return true ;
}
vector<vector<int>> permute(vector<int> &nums)
{
vector<vector<int>> result;
//Base Case For The Problem:
if (nums.size() <= 1)
return {nums};
for (int i = 0; i < nums.size(); i++)
{
vector<int> v(nums.begin(), nums.end());
v.erase(v.begin() + i);
auto res = permute(v);
for (int j = 0; j < res.size(); j++)
{
vector<int> _v = res[j];
_v.insert(_v.begin(), nums[i]);
result.push_back(_v);
}
}
return result;
}
string largestTimeFromDigits(vector<int>& A) {
vector<vector<int>> res ;
vector<string> valid ; //For Only Storing the Valid Time Permutations
res = permute(A);
//Now , Iterating Over All the Permutations:
for(int i=0 ; i<res.size() ; i++){
string curr = "";
for(int j=0 ; j<res[i].size() ; ++j){
curr += res[i][j];
}
if(isValid(curr)) valid.push_back(curr);
}
sort(valid.begin() , valid.end());
string ans = ""; //The Final Answer that we have to return at the end.
if(valid.size() > 0){
//Now , perform the Required Operations:
string temp = valid[valid.size() - 1];
ans = temp.substr(0,2) + ":" + temp.substr(2);
}
return ans;
}
};
最佳答案
您的代码中有两个问题,都与int
和char
的混合有关。第一个在这里:
if(s[2] >=6 ) {
return false ;
}
由于这种情况,您的isValid
总是返回false
。 '0'
... '9'
范围内的任何字符都不小于整数6
。比较char
和char
:if(s[2] >='6' ) {
return false ;
}
接下来,这里 curr += res[i][j];
res[i][j]
是一个整数,但是您想在字符串中添加一个字符: curr += static_cast<char>(res[i][j]) + '0';
修复了这两个问题之后,我至少会获得预期的输入{2,2,2,2}
的输出,请参见此处:https://godbolt.org/z/35r3f9。我不得不提到的是,如果您使用调试器,就会自己发现这些问题。取得更好的编码并不仅仅是减少错误,而在于发现和修复错误方面变得更好。调试器是执行此操作的必要工具。