在backtracking函数中,应该判断startindex是否等于n,而不是k。此外,在check函数中的第二个和第三个判断条件的变量顺序应该交换。修改后的代码如下:

class Solution {
public:
    vector<vector<int>>vec;
    int total=0;
    bool check(int x,int y){
        for(int i=0;i<vec.size();i++){
            if(vec[i][0]==x){return false;}
            if(vec[i][0]+vec[i][1]==x+y){return false;}
            if(vec[i][0]+x==vec[i][1]+y){return false;}
        }
        return true;
    }
    void backtracking(int n,int startindex){
        if(startindex==n){
            total++;
            return;
        }
        for(int i=0;i<n;i++){
            if(check(i,startindex)){
                vec.push_back({i,startindex});
                backtracking(n,startindex+1);
                vec.pop_back();
            }
        }
    }
    int totalNQueens(int n) {
        backtracking(n,0);
        return total;
    }
};
``
class Solution public vectorvectorintvec;int total=0; bool checkint xint y forint i=0;ivecsize;i++ ifveci0==xreturn false; ifveci0+y==veci1+xreturn false;

原文地址: https://www.cveoy.top/t/topic/ilQN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录