【LC刷题】DAY22:491 46 47 332 51 37

news/2024/7/7 18:52:39 标签: 刷题

【LC刷题】DAY22:491 46 47 332 51 37

文章目录

  • 【LC刷题】DAY22:491 46 47 332 51 37
    • 491. 非递减子序列 [link](https://leetcode.cn/problems/non-decreasing-subsequences/description/)
    • 46. 全排列 [link](https://leetcode.cn/problems/permutations/description/)
    • 332. 重新安排行程 [link](https://leetcode.cn/problems/reconstruct-itinerary/description/)
    • 51. N 皇后 [link](https://leetcode.cn/problems/n-queens/description/)
    • 37. 解数独 [link](https://leetcode.cn/problems/sudoku-solver/description/)

491. 非递减子序列 link

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums, int startIndex){
        if(path.size() > 1){
            result.push_back(path);
        }
        unordered_set<int> uset;
        for(int i = startIndex; i < nums.size(); i ++){
            if ((!path.empty() && nums[i] < path.back())
                    || uset.find(nums[i]) != uset.end()) {
                    continue;
            }
            uset.insert(nums[i]);
            path.push_back(nums[i]);
            backtracking(nums, i + 1);
            path.pop_back();
        }
    }
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        backtracking(nums, 0);
        return result;
    }
};

46. 全排列 link

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums, vector<bool> used){
        if(path.size() == nums.size()){
            result.push_back(path);
            return;
        }
        for(int i = 0; i < nums.size(); i ++){
            if(used[i] == true) continue;
            used[i] = true;
            path.push_back(nums[i]);
            backtracking(nums, used);
            path.pop_back();
            used[i] = false;
        }

    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<bool> used(nums.size(), false);
        backtracking(nums, used);
        return result;
    }
};

332. 重新安排行程 link

class Solution {
public:
    unordered_map<string,map<string, int>> targets;
    bool backtracking(int ticketNum, vector<string>& result){
        if(result.size() == ticketNum + 1){
            return true;
        }
        for(pair<const string, int>& target :targets[result[result.size() - 1]]){
            if(target.second > 0){
                result.push_back(target.first);
                target.second --;
                if(backtracking(ticketNum, result)) return true;
                result.pop_back();
                target.second++;
            }
        }
        return false;
    }
    vector<string> findItinerary(vector<vector<string>>& tickets) {
        vector<string> result;
        for(const vector<string>& vec:tickets){
            targets[vec[0]][vec[1]] ++;
        }
        result.push_back("JFK");
        backtracking(tickets.size(), result);
        return result;
    }
};

51. N 皇后 link

class Solution {
public:
  vector<vector<string>> result;
  void backtracking(int n, int row, vector<string> &chessboard) {
    if (row == n) {
      result.push_back(chessboard);
      return;
    }
    for (int col = 0; col < n; col++) {
      if (isvalid(row, col, chessboard, n)) {
        chessboard[row][col] = 'Q';
        backtracking(n, row + 1, chessboard);
        chessboard[row][col] = '.';
      }
    }
  }
  bool isvalid(int row, int col, vector<string> &chessboard, int n) {
    // 检查列
    for (int i = 0; i < row; i++) {
      if (chessboard[i][col] == 'Q') {
        return false;
      }
    }
    // 检查左上到右下的对角线
    for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
      if (chessboard[i][j] == 'Q') {
        return false;
      }
    }
    // 检查右上到左下的对角线
    for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {
      if (chessboard[i][j] == 'Q') {
        return false;
      }
    }
    // 检查水平方向的对角线
    for (int i = row - 1, k = 1; i >= 0 && col + k < n; i--, k++) {
      if (chessboard[i][col + k] == 'Q') {
        return false;
      }
    }
    for (int i = row - 1, k = 1; i >= 0 && col - k >= 0; i--, k++) {
      if (chessboard[i][col - k] == 'Q') {
        return false;
      }
    }
    return true;
  }
  vector<vector<string>> solveNQueens(int n) {
    vector<string> chessboard(n, string(n, '.'));
    backtracking(n, 0, chessboard);
    return result;
  }
};

37. 解数独 link

class Solution {
public:
    bool backtracking(vector<vector<char>>& board){
        for(int i = 0; i < board.size(); i ++){
            for(int j = 0; j < board[0].size(); j ++){
                if(board[i][j] != '.') continue ;
                for(char k = '1'; k <= '9'; k ++){
                    if(isvalid(i, j, k, board)){
                        board[i][j] = k;
                        if(backtracking(board)) return true;
                        board[i][j] = '.';
                    }
                }
                return false;
            }
        }
        return true;
    }
    bool isvalid(int row, int col, char val, vector<vector<char>>& board){
        for(int i = 0; i< 9; i ++){
            if(board[row][i] == val){
                return false;
            }
        }
        for(int j = 0; j < 9; j ++){
            if(board[j][col] == val){
                return false;
            }
        }
        int startRow = (row / 3) * 3;
        int startCol = (col / 3) * 3;
        for(int i = startRow;  i < startRow + 3; i ++){
            for(int j = startCol; j < startCol+3; j ++){
                if(board[i][j] == val){
                    return false;
                }
            }
        }
        return true;
    }
    void solveSudoku(vector<vector<char>>& board) {
        backtracking(board);
    }
};


http://www.niftyadmin.cn/n/5534862.html

相关文章

Kafka集群部署(手把手部署图文详细版)

1.1.1 部署zookpeer 在node02下载并解压zookeeper软件包 cd /usr/local wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz 或者&#xff1a;scp cat192.168.28.100:/home/cat/zookeeper-3.4.6.tar.gz /tmp&#xff08;注意目录&#xf…

Feign 原理流程图练习-01

目录 作业: 老师给的参考流程图 要求 解答 知识扩展 Feign基础原理 接口定义 代理对象生成 请求调用 请求发送 响应处理 容错与熔断 总结 作业: 老师给的参考流程图 pdf版本 【金山文档 | WPS云文档】 Feign https://kdocs.cn/l/ctbagIyxN348 ​ 要求 结合上面…

单例模式(下)

文章目录 文章介绍步骤安排及单例讲解step1&#xff1a;注册单例类型&#xff08;main.cpp&#xff09;step2&#xff1a;定义类和私有构造函数&#xff08;keyboardinputmanager.h&#xff09;step3:&#xff08;keyboardinputmanager.cpp&#xff09;step4&#xff1a;在qml中…

Neo4j 图数据库 高级操作

Neo4j 图数据库 高级操作 文章目录 Neo4j 图数据库 高级操作1 批量添加节点、关系1.1 直接使用 UNWIND 批量创建关系1.2 使用 CSV 文件批量创建关系1.3 选择方法 2 索引2.1 创建单一属性索引2.2 创建组合属性索引2.3 创建全文索引2.4 列出所有索引2.5 删除索引2.6 注意事项 3 清…

基于weixin小程序农场驿站系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;农场资讯管理&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;用户分享管理&#xff0c;分享类型管理&#xff0c;商品信息管理&#xff0c;商品类型管理 开发系统&#xff1a;Windows 架构模式…

RClone挂载有阿里云的AList

转自个人博客&#xff1a;https://www.jjy2023.cn/2024/05/23/rclone%e6%8c%82%e8%bd%bd%e6%9c%89%e9%98%bf%e9%87%8c%e4%ba%91%e7%9a%84alist-md/ RClone挂载一般的AList可以直接使用mount命令&#xff0c;但是阿里云需要使用指定头部Referer:https://www.aliyundrive.com/ &a…

QListView自定义item(结合QSqlQueryModel)

QListView:绘制自定义List&#xff08;一&#xff09;——设置ItemDelegate_qt_繁星执着-开放原子开发者工作坊 (csdn.net) QListView自定义Item_qlistview 自定义item-CSDN博客 结合我写的上一篇文章&#xff1a; QTableView与QSqlQueryModel的简单使用-CSDN博客 这次尝试…

OpenCV——实现裁剪YOLO格式的图片目标并按图片名保存

import os import cv2def crop_image(image_path, label_path, output_folder):# 读取图片img cv2.imread(image_path)height, width, _ img.shape# 读取标签文件with open(label_path, r) as file:labels file.readlines()img_id 1# 遍历每个标签for label in labels:part…