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;



    }
};

最佳答案

您的代码中有两个问题,都与intchar的混合有关。第一个在这里:

if(s[2] >=6 ) {
    return false ;
}
由于这种情况,您的isValid总是返回false'0' ... '9'范围内的任何字符都不小于整数6。比较charchar:
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
我不得不提到的是,如果您使用调试器,就会自己发现这些问题。取得更好的编码并不仅仅是减少错误,而在于发现和修复错误方面变得更好。调试器是执行此操作的必要工具。

09-10 04:45
查看更多