首页 > 编程语言 >代码随想录算法训练营第30天 | 332.重新安排行程 、51. N皇后、37. 解数独

代码随想录算法训练营第30天 | 332.重新安排行程 、51. N皇后、37. 解数独

时间:2024-06-06 22:57:27浏览次数:28  
标签:map return 随想录 30 51 let board const row

332.重新安排行程(可跳过)
https://programmercarl.com/0332.重新安排行程.html

有难度,涉及到图,有些用例会超时
/**
 * @param {string[][]} tickets
 * @return {string[]}
 */
var findItinerary = function(tickets) {
    const res = ['JFK'];
    const map = {};
    for (let [from, to] of tickets) {
        if (!map[from]) {
            map[from] = [];
        }
        map[from].push(to);
    }
    for (let key in map) {
        map[key].sort();
    }

    const backtraversing = ()=>{
        if (res.length === tickets.length+1) {
            return true;
        }
        if (!map[res[res.length-1]] || !map[res[res.length-1]].length) {
            return false;
        }

        for (let i=0;i<map[res[res.length-1]].length;i++) {
            let city = map[res[res.length-1]][i];
            map[res[res.length-1]].splice(i,1);
            res.push(city);
            if (backtraversing()) {
                return true;
            }
            res.pop();
            map[res[res.length-1]].splice(i,0,city);

        }
    
    }
    backtraversing();
    return res;
};
  1. N皇后(可跳过)
    https://programmercarl.com/0051.N皇后.html
    视频讲解:https://www.bilibili.com/video/BV1Rd4y1c7Bq
能想到思路,但具体的实现有些写不出来
function isVaild(arr, row, col) {
    for (let i = 0; i< row; i++) {
        if (arr[i][col] === 'Q') {
            return false;
        }
    }

    for (let i=row-1,j=col-1;i>=0&&j>=0;i--,j--) {
        if (arr[i][j]==='Q') {
            return false;
        }
    }

    for (let i=row-1,j=col+1;j<arr.length&&i>=0;i--,j++) {
        if (arr[i][j]==='Q') {
            return false;
        }
    }
    return true;
}
/**
 * @param {number} n
 * @return {string[][]}
 */
var solveNQueens = function(n) {
    const res = [];
    const path = [];
    const matrix = new Array(n).fill(0).map(()=>new Array(n).fill('.'));
    const backtraversing = (n, row, matrix) => {
        if (n === row) {
            res.push([...path]);
            return;
        }

        for (let i=0;i<n;i++) {
            if (!isVaild(matrix, row, i)) {
                continue;
            }
            matrix[row][i] = 'Q';
            path.push(matrix[row].join(''));
            backtraversing(n, row+1, matrix);
            matrix[row][i]='.';
            path.pop();
        }
    }
    backtraversing(n, 0, matrix);
    return res;
};
  1. 解数独(可跳过)
    https://programmercarl.com/0037.解数独.html
    视频讲解:https://www.bilibili.com/video/BV1TW4y1471V
function isValid(row, col, val, board) {
        let len = board.length
        // 行不能重复
        for(let i = 0; i < len; i++) {
            if(board[row][i] === val) {
                return false
            }
        }
        // 列不能重复
        for(let i = 0; i < len; i++) {
            if(board[i][col] === val) {
                return false
            }
        }
        let startRow = Math.floor(row / 3) * 3
        let startCol = Math.floor(col / 3) * 3

        for(let i = startRow; i < startRow + 3; i++) {
            for(let j = startCol; j < startCol + 3; j++) {
                if(board[i][j] === val) {
                    return false
                }
            }
        }

        return true
    }

/**
 * @param {character[][]} board
 * @return {void} Do not return anything, modify board in-place instead.
 */
var solveSudoku = function(board) {
    const back = (board) => {
        let len = board.length;
        for(let row = 0;row<len;row++) {
            for (let col =0;col<len;col++) {
                if (board[row][col]!=='.') continue;
                for (let k=1;k<=9;k++) {
                    let strNum = k+'';
                    if (!isValid(row,col,strNum,board)) continue;
                    board[row][col] = strNum;
                    if (back(board)) return true;
                    board[row][col] = '.';
                }
                return false;
            }
        }
        return true;
    }
    back(board);
    return board;
};

总结
https://programmercarl.com/回溯总结.html

标签:map,return,随想录,30,51,let,board,const,row
From: https://www.cnblogs.com/yuanyf6/p/18236231

相关文章

  • 5.30
    做完了安卓端的政策查询系统页面跳转时数据传递这儿想到一个不一样的方法页面跳转的主函数这儿初始化viewModel避免了每次使用viewModel的初始化,将他作为一个参数传递给各个页面@ComposablefunAppNavHost(rootNavController:NavHostController=rememberNavContro......
  • 代码随想录第2天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,数组总结
    题目:977.有序数组的平方思路:first.for循环,平方,然后sort排序,提交通过啊哈~|但时间复杂度大O(n+nlogn),->O(nlogn)的时间复杂度,题目进阶要求时间复杂度为O(n)second.双指针。题目为有序数组,包含负数,则平方后,最大值在数组的两头,则使用双指针进行,两个比较大小,大的存入新......
  • 代码随想录算法训练营第二十九天 | 491.非递减子序列
    491.非递减子序列题目链接文章讲解视频讲解层间去重:回溯法相当于深搜,所以所以是一直递归到叶节点才开始回溯;每次进入backtracking也就进入了搜索树的下一层,所以每进入一层需要用一个used_set来记录使用过的元素;classSolution{private:vector<int>sub;vecto......
  • [DP] LCS例题 Luogu P1439 【模板】最长公共子序列 Luogu P4303 基因匹配
    LuoguP1439【模板】最长公共子序列【模板】最长公共子序列题目描述给出\(1,2,\ldots,n\)的两个排列\(P_1\)和\(P_2\),求它们的最长公共子序列。输入格式第一行是一个数\(n\)。接下来两行,每行为\(n\)个数,为自然数\(1,2,\ldots,n\)的一个排列。输出格式一个数,即......
  • CF1651E Sum of Matchings
    标签:图论鱼鱼蒸题。原图由若干个偶环组成,那么对于每个环分别计算贡献,枚举环上的一段区间,然后算出要能包含这一段的\(l,r,L,R\)的对应的最小区间,然后又不能包含这段区间左右的点,所以要去掉一部分,然后乘起来再乘上区间长度的一半即可。优美的代码实现。#include<bits/stdc++.......
  • AI全自动批量剪辑软件,一天剪辑3000条原创视频不是梦【剪辑软件+全套教程】
    创建一个AI全自动批量剪辑软件的简易程序涉及较为复杂的视频处理和机器学习技术,而且由于这是一个相当高级的任务,通常需要大量的代码以及深度学习框架支持。不过,我可以为您提供一个非常基础版本的程序示例,它会用Python的moviepy库批量剪辑一组视频,每个视频裁剪前10秒作为示例......
  • 51单片机独立按键控制流水灯,按一次左流水,再按一次反向流水
    1、功能描述独立按键控制流水灯,按一次左流水,再按一次反向流水2、实验原理单片机的I/O口可以通过编程设置为输入或输出模式。在流水灯实验中,我们将I/O口配置为输出模式,用于控制LED灯的亮灭。同时,我们还需要一个输入口来检测按键的状态,以实现按键控制流水灯的功能。流水灯的效......
  • 51单片机独立按键控制LED灯,按键按一次亮,再按一次灭
    1、功能描述独立按键控制LED灯,按键按一次亮,再按一次灭2、实验原理轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开;独立按键原理图如下:其在MCU上的位置如下所示:由上面两张图可以知道,独立按键......
  • 代码随想录算法训练营第一天 | 704. 二分查找 27. 移除元素
    704.二分查找题目:给定一个n个元素有序的(升序)整型数组和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。提示:1.你可以假设nums中的所有元素是不重复的。2.n将在[1,10000]之间。3.nums的每个元素都将在[-9999,9999]之间。解题:思路:二......
  • 要将dz_book_codebatch表的id字段从现有的大值(如3051571883xxxxxx1)重新设置为从1开始
    --备份数据CREATETABLEdz_book_codebatch_backupLIKEdz_book_codebatch;INSERTINTOdz_book_codebatch_backupSELECT*FROMdz_book_codebatch;--创建新表CREATETABLEdz_book_codebatch_newLIKEdz_book_codebatch;--设置自增初始值ALTERTABLEdz_book_codebatch_......