LeetCode 每日一题 2024/12/2-2024/12/8

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • 12/2 52. N 皇后 II
      • 12/3 3274. 检查棋盘方格颜色是否相同
      • 12/4 2056. 棋盘上有效移动组合的数目
      • 12/5 3001. 捕获黑皇后需要的最少移动次数
      • 12/6 999. 可以被一步捕获的棋子数
      • 12/7 688. 骑士在棋盘上的概率
      • 12/8 782. 变为棋盘


12/2 52. N 皇后 II

dfs
使用三个set记录已有皇后的位置
列,左到右的斜线,右到左的斜线
y, x+y, x-y
如果当前位置可以放 那么将这三个值放入 并记录当前x层的列位置y
查看下一层x+1
如果已到了最后一层则保存当前其情况
否则将刚才的状态清空 查看下一个位置

def totalNQueens(n):""":type n: int:rtype: int"""col,ltr,rtl =set(),set(),set()ans=[]pos=[]def dfs(y):for x in range(n):if (x not in col) and ((x+y) not in ltr) and ((x-y) not in rtl):col.add(x)ltr.add(x+y)rtl.add(x-y)pos.append(x)if y+1==n:tmp=pos[:]ans.append(tmp)else:dfs(y+1)col.remove(x)ltr.remove(x+y)rtl.remove(x-y)pos.pop()dfs(0)return(len(ans))

12/3 3274. 检查棋盘方格颜色是否相同

a看作0 相加奇偶性一致颜色一致

def checkTwoChessboards(coordinate1, coordinate2):""":type coordinate1: str:type coordinate2: str:rtype: bool"""if (ord(coordinate1[0])+int(coordinate1[1])-ord(coordinate2[0])-int(coordinate2[1]))%2==0:return True

12/4 2056. 棋盘上有效移动组合的数目

createmoves 生成某个棋子所有可能移动
check检查两个棋子移动是否会重叠
枚举每个合法移动 如果棋子没有重叠则答案+1
如果当前棋子移动和前面棋子冲突则不往下递归

def countCombinations(pieces, positions):""":type pieces: List[str]:type positions: List[List[int]]:rtype: int"""def createmoves(x0,y0,dirs):moves = [(x0,y0,0,0,0)]for dx,dy in dirs:x,y=x0+dx,y0+dystep = 1while 0<x<=8 and 0<y<=8:moves.append((x0,y0,dx,dy,step))step+=1x+=dxy+=dyreturn movesdef check(m1,m2):x1,y1,dx1,dy1,step1=m1x2,y2,dx2,dy2,step2=m2for i in range(max(step1,step2)):if i<step1:x1+=dx1y1+=dy1if i<step2:x2+=dx2y2+=dy2if x1==x2 and y1==y2:return Falsereturn Truerookstep = [(1,0),(0,1),(-1,0),(0,-1)]bishopstep = [(1,1),(1,-1),(-1,1),(-1,-1)]allsteps={'r':rookstep,'b':bishopstep,'q':rookstep+bishopstep}allmoves=[createmoves(x,y,allsteps[p[0]]) for p,(x,y) in zip(pieces,positions)]n=len(pieces)path=[None]*nglobal ansans=0def dfs(i):global ansif i==n:ans+=1return for m1 in allmoves[i]:if all(check(m1, m2) for m2 in path[:i]):path[i]=m1dfs(i+1)dfs(0)return ans

12/5 3001. 捕获黑皇后需要的最少移动次数

在没有阻挡的情况下
不管什么位置 车最多用两步捕获皇后
象在斜线上 无阻挡用一步
先判断象和皇后是否在一条斜线上
如果车在他们中间则返回2 否则返回1
在判断车和皇后是否在一条直线上
如果象在中间 则返回2 否则1
其余情况车到皇后需要两步

def minMovesToCaptureTheQueen(a, b, c, d, e, f):""":type a: int:type b: int:type c: int:type d: int:type e: int:type f: int:rtype: int"""if abs(c-e)==abs(d-f):if abs(a-c)==abs(b-d) and min(c,e)<a<max(c,e) and min(d,f)<b<max(d,f):return 2else:return 1if a==e:if c==a and min(b,f)<d<max(b,f):return 2else:return 1if b==f:if d==b and min(a,e)<c<max(a,e):return 2else:return 1return 2

12/6 999. 可以被一步捕获的棋子数

找到车的位置 向四个方向搜索是否第一个棋子为卒

def numRookCaptures(board):""":type board: List[List[str]]:rtype: int"""n=8x0,y0=0,0for i in range(n):for j in range(n):if board[i][j]=='R':x0=iy0=jbreakans = 0steps=[(1,0),(0,1),(-1,0),(0,-1)]for dx,dy  in steps:x,y=x0+dx,y0+dywhile 0<=x<n and 0<=y<n:if board[x][y]=='p':ans+=1breakif board[x][y]=='B':breakx+=dxy+=dyreturn ans

12/7 688. 骑士在棋盘上的概率

dp[step][i][j]标记为从(i,j)出发走step步 仍在棋盘上的概率
如果step为0,(i,j)在棋盘上为1 不在棋盘上为0
每次有八种走法

def knightProbability(n, k, row, column):""":type n: int:type k: int:type row: int:type column: int:rtype: float"""dp = [[[0]*n for _ in range(n)] for _ in range(k+1)]for step in range(k+1):for i in range(n):for j in range(n):if step==0:dp[step][i][j]=1else:for mi,mj in [(-2, -1), (-2, 1), (2, -1), (2, 1), (-1, -2), (-1, 2), (1, -2), (1, 2)]:ni,nj = i+mi,j+mjif 0<=ni<n and 0<=nj<n:dp[step][i][j] += dp[step-1][ni][nj]*1.0/8return dp[k][row][column]

12/8 782. 变为棋盘

第一步 判断可行性
若需要变为棋盘 每一行或者每一列中1和0的个数差不超过1
对于某两行 i,j 行变换不会影响两行的对应位置差值
列变换同样不会影响两行所有位置差值和
例如 i:00110
j:11000
对于这两行 i,j 无论行列怎么变换必定存在某一列为两个0
所以若要变为棋盘 行的状态必定只能存在两种
并且两行内每个位置值相反
列状态也相同
第二部 计算移动次数
对于行来说 进行列移动改变状态
因为只存在两种相反状态的行
所以只需要将一行移动成功 对应的左右行也移动成功
只需考虑第一行移动成功的次数
如果每一行个数n为偶数 则有两种情况 判断成为0101…或者1010…哪一种次数少
如果n为奇数 则起始位置只能为个数多的1或者0一种情况
列的情况与行相同且互不影响
将两种情况相加即可
binvalue用来将数组l内的数组合为一个二进制数
numone用来统计二进制数内1的个数
mask0,mask1分别代表0101…,1010…两种状态结果

def movesToChessboard(board):""":type board: List[List[int]]:rtype: int"""def binvalue(l):v = 0for i in l:v = (v<<1)+ireturn vdef numone(v):ans = 0while v>0:if v&1==1:ans+=1v>>=1return ansn= len(board)row = sum(board[0])col = sum([board[i][0] for i in range(n)])if abs(2*row-n)>1 or abs(2*col-n)>1:return -1rowv = binvalue(board[0])colv = binvalue([board[i][0] for i in range(n)])       for i in range(1,n):tmpr = binvalue(board[i])if tmpr!=rowv and tmpr^rowv!=2**n-1:return -1tmpc = binvalue([board[j][i] for j in range(n)])if tmpc!=colv and tmpc^colv!=2**n-1:return -1mask0,mask1 = 0,0for i in range(n):mask0 = (mask0<<1)+(i%2)mask1 = (mask1<<1)+((i+1)%2)    total = 0if n%2==0:total += min(numone(rowv^mask0),numone(rowv^mask1))total += min(numone(colv^mask0),numone(colv^mask1))else:if row*2>n:total += numone(rowv^mask1)else:total += numone(rowv^mask0)if col*2>n:total += numone(colv^mask1)else:total += numone(colv^mask0)return total//2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快捷构建AI大模型,源码自取可直接运行

Node.js 和 WebSocket 实现一个基于kimi&#xff08;Moonshot 月之暗大模型&#xff09;的AI工具 前端&#xff1a;前端界面比较容易&#xff0c;只需要简单的额css js即可&#xff0c;本文使用vue作为作为demo。 后端&#xff1a;我java很垃圾&#xff0c;写不出好的代码&am…

C# 关于实现保存数据以及数据溯源推送

前言 实现了一个数据接收、存储和推送的功能 首先定义我们数据存储的格式&#xff08;可根据自己的需求定义格式&#xff09;&#xff1a; 数据切割符号&#xff1a;**$是区分数据与其他数据的划分 数据内容切割号&#xff1a;|**是区分时间戳与内容数据的划分 以下是我存储的…

R语言 | 峰峦图 / 山脊图

目的&#xff1a;为展示不同数据分布的差异。 1. ggplot2 实现 # 准备数据 datmtcars[, c("mpg", "cyl")] colnames(dat)c("value", "type") head(dat) # value type #Mazda RX4 21.0 6 #Mazda RX4 Wag …

Redis性能优化18招

Redis性能优化的18招 目录 前言选择合适的数据结构避免使用过大的key和value[使用Redis Pipeline](#使用Redis Pipeline)控制连接数量合理使用过期策略使用Redis集群充分利用内存优化使用Lua脚本监控与调优避免热点key使用压缩使用Geo位置功能控制数据的持久化尽量减少事务使…

学习笔记063——通过使用 aspose-words 将 Word 转 PDF 时,遇到的字体改变以及乱码问题

文章目录 1、问题描述&#xff1a;2、解决方法&#xff1a; 1、问题描述&#xff1a; Java项目中&#xff0c;有个需要将word转pdf的需求。本人通过使用aspose-words来转换的。在Windows中&#xff0c;转换是完全正常的。但是当部署到服务器时&#xff0c;会出现转换生成的pdf…

(6)JS-Clipper2之ClipperOffset

1. 描述 ClipperOffset类封装了对打开路径和关闭路径进行偏移(膨胀/收缩)的过程。 这个类取代了现在已弃用的OffsetPaths函数&#xff0c;该函数不太灵活。可以使用不同的偏移量(增量)多次调用Execute方法&#xff0c;而不必重新分配路径。现在可以在一次操作中对开放和封闭路…

SpringCloudAlibaba教程之注册中心Nacos

目录 概念 架构 设计原则 架构分层 用户层 业务层 内核层 插件 单机部署 1.下载安装包 2.安装nacos 3.启动nacos 快速开始 1.添加Maven依赖 2.添加配置 3.启动 集群部署 搭建步骤 1.搭建数据库&#xff0c;初始化数据库表结构 2.配置nacos 3.启动nacos集群…

PostgreSQL 安装部署系列:使用YUM 方式在Centos 7.9 安装指定 PostgreSQL -15版本数据库

一、前言 千里之行始于足下&#xff0c;想学习一门数据库&#xff0c;首先要从安装部署开始&#xff0c;先拥有一套属于自己的学习测试库。为了更好的学习该数据库&#xff0c;可以选择一个在企业界使用率比较普及的操作系统&#xff0c;选择稳定版本的操作系统&#xff1b;如果…

【算法】数组中,求K个最大值

已知&#xff1a;数组 [8, 9, 15, 20, 3, 5, 7, 2, 6]&#xff0c;求第8个最大值是哪个值&#xff1f; function quickSort(arr, targetIndex, start) {if (arr.length < 1) return arr[0];let left [];let right [];const mid Math.floor(arr.length / 2);const midNum…

李飞飞的生成式3D场景,对数字孪生的未来影响几何?

大家好&#xff0c;我是日拱一卒的攻城师不浪&#xff0c;致力于技术与艺术的融合。这是2024年输出的第47/100篇文章。 前言 这两天&#xff0c;AI界的教母李飞飞团队重磅发布了空间智能生成式AI大模型。 仅通过一张图片就能够生成一个可操作和交互的3D空间场景。 空间智能的…

【Redis集群】使用docker compose创建docker集群,并暴露外部接口

使用 Docker Compose 创建一个 Redis 集群并暴露外部接口需要配置 docker-compose.yml 文件。以下是一个基本的步骤&#xff0c;包括 Redis 集群的创建和外部接口的暴露。 1、创建 docker-compose.yml 首先&#xff0c;您需要创建一个 docker-compose.yml 文件&#xff0c;配…

Redis面试专题-持久化

目录 前言 持久化相关知识 1.三种持久化机制 2.RDB持久化 3.深入剖析一下RDB持久化过程 4.AOF持久化 5.RDB和AOF对比​编辑 面试题 1.redis持久化机制有哪些&#xff1f; 2.那仔细讲讲你对他们的理解 3.你刚刚说AOF的文件很大&#xff0c;那AOF文件会越来越大&#xf…

数据结构之初始二叉树(1)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 树型结构 树的概念 与树的有关概念 树的表示形式 树的应用 二叉树 概念 两种特殊的…

LeetCode139. 单词拆分(2024冬季每日一题 29)

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s “leetcode”, wordDic…

酷柚易汛生产管理系统PHP+Uniapp

生产管理系统&#xff0c;帮助企业数字化转型&#xff0c;打造智能工厂&#xff0c;专业为生产企业量身开发的一套完整的生产管理系统。主要包含以下模块&#xff1a;购货模块、生产模块、仓库模块、资料模块&#xff0c;可配合酷柚易汛进销存无缝衔接使用。 产品理念: 共享功…

从零开始学TiDB(2)深入了解TiDB Server模块

TiDB Server 架构 TiDB Server 的主要功能&#xff1a; 一条SQL的执行流程&#xff1a; 1.将整个SQL语句解析成一个个的token&#xff0c;生成一个树形结构。 2.编译模块 1.首先需要做一个合法性验证&#xff0c;比如表存不存在等。 2.做逻辑优化&#xff1a;依据关系型代数等…

贪心算法专题(四)

目录 1. 单调递增的数字 1.1 算法原理 1.2 算法代码 2. 坏了的计算器 2.1 算法原理 2.2 算法代码 3. 合并区间 3.1 算法原理 3.2 算法代码 4. 无重叠区间 4.1 算法原理 4.2 算法代码 5. 用最少数量的箭引爆气球 5.1 算法原理 ​5.2 算法代码 1. 单调递增的数字…

241207-通过Docker部署Wiki.JS并设置ElasticSearch进行中文搜索

A. 最终效果 B. 配置文件 version: "3" services:wiki:image: ghcr.io/requarks/wiki:2container_name: wikijsports:- "3000:3000"volumes:- /home/lgk/Projects/WikiJS/config:/configenvironment:- DB_TYPEpostgres- DB_HOSTdatabase- DB_PORT5432- DB…

Spring Boot如何实现防盗链

一、什么是盗链 盗链是个什么操作&#xff0c;看一下百度给出的解释&#xff1a;盗链是指服务提供商自己不提供服务的内容&#xff0c;通过技术手段绕过其它有利益的最终用户界面&#xff08;如广告&#xff09;&#xff0c;直接在自己的网站上向最终用户提供其它服务提供商的…

Splatter Image运行笔记

文章标题&#xff1a;Splatter Image: Ultra-Fast Single-View 3D Reconstruction 1. 环境配置 下载Splatter Image代码 git clone https://github.com/szymanowiczs/splatter-image.git 创建环境 conda create --name splatter-image python3.8 激活环境 conda activat…