leetcode刷题算法总结

1 回溯

https://mp.weixin.qq.com/s/nMUHqvwzG2LmWA9jMIHwQQ

leetcode 46 全排列:

https://leetcode.cn/problems/permutations/

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> ret;
        vector<int> track;
        backtrack(track,ret,nums);
        return ret;
    }

    void backtrack(vector<int>& track,vector<vector<int>>& ret,vector<int>& nums){
        if(track.size()==nums.size()){
            ret.push_back(track);
            return;
        }
        else{
            int len=nums.size();
            for(int i=0;i<len;i++){
                if(find(track.begin(),track.end(),nums[i])==track.end()){
                    track.push_back(nums[i]);
                    backtrack(track,ret,nums);
                    track.pop_back();
                }
            }
        }
        return;
    }
};

leetcode 51 N皇后

https://leetcode.cn/problems/n-queens/

class Solution {
public:
    vector<vector<string>> solveNQueens(int n) {
        vector<vector<string>> ret;
        vector<string> track;
        for(int i=0;i<n;i++){
            track.push_back("");
            for(int j=0;j<n;j++){
                track[track.size()-1]+='.';
            }
        }
        backtrack(ret,track,0,n);
        return ret;
    }

    void backtrack(vector<vector<string>>& ret,vector<string>& track,int row,int n){
        if(row==n){
            ret.push_back(track);
            return;
        }
        else{
            for(int col=0;col<n;col++){
                if(isvalid(track,row,col)){
                    track[row][col]='Q';
                    backtrack(ret,track,row+1,n);
                    track[row][col]='.';
                }
            }
        }
        return;
    }

    int isvalid(vector<string> track,int row,int col){
        int n=track.size();
        for(int i=0;i<n;i++){
            if(i!=row&&track[i][col]=='Q'){
                return 0;
            }
        }
        for(int i=row-1,j=col-1;i>=0&&j>=0;i--,j--){
            if(track[i][j]=='Q'){
                return 0;
            }
        }
        for(int i=row-1,j=col+1;i>=0&&j<n;i--,j++){
            if(track[i][j]=='Q'){
                return 0;
            }
        }
        return 1;
    }
};

leetcode 52 N皇后 Ⅱ

https://leetcode.cn/problems/n-queens-ii/

class Solution {
public:
    int totalNQueens(int n) {
        int ret=0;
        int *pointer=&ret;
        vector<string> track;
        for(int i=0;i<n;i++){
            track.push_back("");
            for(int j=0;j<n;j++){
                track[track.size()-1]+='.';
            }
        }
        backtrack(pointer,track,0,n);
        return ret;
    }

    void backtrack(int *ret,vector<string>& track,int row,int n){
        if(row==n){
            *ret+=1;
            return;
        }
        else{
            for(int col=0;col<n;col++){
                if(isvalid(track,row,col)){
                    track[row][col]='Q';
                    backtrack(ret,track,row+1,n);
                    track[row][col]='.';
                }
            }
        }
        return;
    }

    int isvalid(vector<string> track,int row,int col){
        int n=track.size();
        for(int i=0;i<n;i++){
            if(i!=row&&track[i][col]=='Q'){
                return 0;
            }
        }
        for(int i=row-1,j=col-1;i>=0&&j>=0;i--,j--){
            if(track[i][j]=='Q'){
                return 0;
            }
        }
        for(int i=row-1,j=col+1;i>=0&&j<n;i--,j++){
            if(track[i][j]=='Q'){
                return 0;
            }
        }
        return 1;
    }
};

2 数学

判断三个边能不能组成一个三角形判断两个小边的和是否大于第三条边就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值