首页 > 编程语言 >程序员面试金典---15

程序员面试金典---15

时间:2023-04-24 22:46:45浏览次数:48  
标签:15 stringBoard 金典 --- board 数组 return col row

八皇后

直接上代码:

/**
 * @param {number} n
 * @return {string[][]}
 */
var solveNQueens = function(n) {
    // 创建一个长度为n的一维数组,其元素值为'.',然后再利用map()方法将其转化成一个n * n的二维数组board。我们可以把它看成 n x n 的棋盘,初始化所有位置都是没有皇后的状态。
    const board = new Array(n).fill('.').map(x =>new Array(n).fill('.'))
    // 创建一个空数组来存放结果,以便在检查完所有可能的组合后将解决方案添加到该数组中。
    const res = [] // 结果数组
	// isValid函数用于检查当前位置(row, col)是否可以放置皇后。通过循环遍历之前的各行、列、对角线上是否已经存在皇后,如果存在则返回false,否则返回true。
    function isValid(row, col){
        for(let i = 0;i < row;i++){
            for(let j = 0;j < n; j++){
                if(board[i][j] == 'Q' && (j == col || i + j === row + col || i - j === row - col)){
                    return false
                }
            }
        }
        return true
    }
	
    function hepler(row){
        // 如果当前row等于n,说明已经找到了一个可行解,将其转换成字符串格式并添加到数组res中保存。递归出口
        if(row == n){
            const stringBoard = board.slice();
            for(let i = 0; i < n;i++){
                stringBoard[i] = stringBoard[i].join('')
            }
            res.push(stringBoard)
            return
        }
        // 如果当前位置(row, col)能够放置皇后,就将该位置设置为'Q',然后递归地调用helper函数,查找下一行。如果无法放置,则试图在本行的其他位置寻找可行的位置。
        for(let col = 0; col < n; col++){
            if(isValid(row, col)){
                board[row][col] = 'Q'
                hepler(row + 1)
                board[row][col] = '.'
            }
        }
    }
    hepler(0)
    return res
};

标签:15,stringBoard,金典,---,board,数组,return,col,row
From: https://www.cnblogs.com/dgqp/p/17351218.html

相关文章

  • Codeforces 1804G - Flow Control(势能分析)
    成功把这道小清新题做成了一道大数据结构题,我的评价是我是小丑。首先显然要离散化对时间轴扫描线。这个除以\(2\)下取整的操作显然启示我们往势能的方向思考,也就是我们希望能够找到某个变量,使得这个变量的均摊变化次数在可接受范围内。但是直接以每个元素的值为势能好像也不太......
  • 第九届福建省大学生程序设计竞赛-重现赛(感谢承办泉州师范学院)
    Inthedistantspace,thereisatechnologicallyadvancedplanet.OnedaytheyprovidedtheEarthwithacodethatcouldachievetheultimatemeaningoftheuniverse.Peoplewereveryhappy,butfoundthatthiscodecanonlyrunoncomputerswithawordle......
  • 第九届福建省大学生程序设计竞赛-重现赛(感谢承办泉州师范学院) spfa变形
    Xzzisachildwithsevereprocrastinations.Thenewsemesterbegins,Hestillhasalotofhomeworktodo.Now,heneedsyourhelp.Asthebestfriend,youaregoodatmath.So,youwillhelphimdosomemathhomework.NowXzzwantstogotoyourhome.Y......
  • Codeforces Round #156 (Div. 2) C. Almost Arithmetical Progression dp
    Genalovessequencesofnumbers.Recently,hehasdiscoveredanewtypeofsequenceswhichhecalledanalmostarithmeticalprogression.Asequenceisanalmostarithmeticalprogression,ifitselementscanberepresentedas:a1 = p,wherepissomeintege......
  • The 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest
    ThetunnelsofCuChiareanimmensenetworkofundergroundtunnelsconnectingroomslocatedintheCuChiDistrictofHoChiMinhCity.TheCuChitunnelswerethelocationofseveralmilitarycampaignsinthe1960s.Nowadays,itisapopulartouristdes......
  • HDU - 5649 线段树+区间二分答案 (好题)
    DZYhasasequencea[1…n].Itisapermutationofintegers1∼n.Nowhewantstoperformtwotypesofoperations:0lr:Sorta[l…r]inincreasingorder.1lr:Sorta[l…r]indecreasingorder.Afterdoingalltheoperations,hewilltellyouapositionk,andask......
  • Linux基础知识(16)- Kerberos (一) | Kerberos 安装配置
    Kerberos(SecureNetworkAuthenticationSystem,网络安全认证系统),是一种网络认证协议,其设计目标是通过密钥系统为Client/Server提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任......
  • 数据库连接池 - Pymysql
    最近想用小程序来做个移动BI,然后涉及后端接口部分打算用Python的flask框架整一波,主要听闻它比较轻量,简单和可灵活配置,这就和我很对味.毕竟我主要搞数据用的就是sql而已,只要有个服务器提供接口就行.真正开始来写接口的时候,就遇到这个数据库的问题,关于查询效......
  • Fast Food UVA - 662
    政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0<i<m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设0<n≤m<500)。请根据给定的m、n以及所有......
  • 抖音x-bogs参数
    目标//从varx_bogus='DFSzswVVUyXANrqJSkdAml9WX7jG';//还原出varx_array=[64,0.00390625,1,28,7,22,69,63,0,186,99,164,90,214,32,0,190,144,201];正向梳理主要加密函数function_0x2f2740(a,c,e,b,d,f,t,n,o,i,r,_,x,u,s,l,......