52. N-Queens II

来源:互联网 发布:盒子设计软件绿色版 编辑:程序博客网 时间:2024/05/17 23:29

1刷
没啥好说的。看回51吧,一个样

class Solution {public:    vector<string>ntemp;    vector<vector<int> >visit;    vector<vector<string> >outcome;    int temp = 0;    void changevisit0(int a, int b, int n){        for(int i = 0; i < n; ++ i){            visit[a][i] --;            visit[i][b] --;        }        visit[a][b]++;        for(int i = 1; a + i < n && b + i < n; ++ i)            visit[a + i][b + i] --;        for(int i = 1; a - i >= 0 && b - i >= 0; ++i)            visit[a - i][b - i] --;        for(int i = 1; a - i >= 0 && b + i < n; ++ i)            visit[a - i][b + i] --;        for(int i = 1; a + i < n && b - i >= 0; ++ i)            visit[a + i][b - i] --;    }    void changevisit1(int a, int b, int n){        for(int i = 0; i < n; ++ i){            visit[a][i] ++;            visit[i][b] ++;        }        visit[a][b]--;        for(int i = 1; a + i < n && b + i < n; ++ i)            visit[a + i][b + i] ++;        for(int i = 1; a - i >= 0 && b - i >= 0; ++i)            visit[a - i][b - i] ++;        for(int i = 1; a - i >= 0 && b + i < n; ++ i)            visit[a - i][b + i] ++;        for(int i = 1; a + i < n && b - i >= 0; ++ i)            visit[a + i][b - i] ++;    }    void dfs(int a, int b, int n, int num){        if(a == n)            return ;        ntemp[a][b] = 'Q';        changevisit1(a, b, n);        if(num + 1 == n){            //outcome.push_back(ntemp);            temp++;        }        else         for(int i = 0; i < n; ++ i)            if(visit[a + 1][i] == 0)            dfs(a + 1, i, n, num + 1);        ntemp[a][b] = '.';        changevisit0(a, b, n);        return ;    }    int totalNQueens(int n) {        string s = "";        for(int i = 0; i < n; ++ i)            s += ".";        for(int i = 0; i < n; ++ i)            ntemp.push_back(s);        vector<int>u;        for(int i = 0; i < n; ++ i)            u.push_back(0);        for(int i = 0; i < n; ++ i)            visit.push_back(u);        for(int i = 0; i < n; ++ i){            dfs(0, i, n, 0);            for(int j = 0; j < n; ++ j)                for(int k = 0; k < n; ++ k){                    visit[j][k] = 0;                    ntemp[j][k] = '.';                }        }        return temp;    }};

2刷

class Solution {public:    void solve(int& sum, vector<string>& vec, vector<int>& flag, int row, int n){        if(row == n){            sum++;            return ;        }        for(int i = 0; i < n; ++i)            if(flag[i] && flag[n + row + i] && flag[4 * n - 2 + i - row]){                flag[i] = flag[n + row + i] = flag[4 * n - 2 + i - row] = 0;                vec[row][i] = 'Q';                solve(sum, vec, flag, row + 1, n);                vec[row][i] = '.';                flag[i] = flag[n + row + i] = flag[4 * n - 2 + i - row] = 1;            }    }    int totalNQueens(int n) {        int sum = 0;        vector<string>vec(n, string(n, '.'));        vector<int>flag(5 * n - 2, 1);        solve(sum, vec, flag, 0, n);        return sum;    }}; class Solution {public:    int maxSubArray(vector<int>& nums) {        int maxx = INT_MIN;        int sum = 0;        for(int i = 0; i < nums.size(); ++ i){            sum += nums[i];            if(sum > maxx) maxx = sum;            if(sum < 0) sum = 0;        }        return maxx;    }};
0 0