当前位置: 首页 > ds >正文

LeetCode 每日一题 2025/8/25-2025/8/31

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


目录

      • 8/25 498. 对角线遍历
      • 8/26 3000. 对角线最长的矩形的面积
      • 8/27 3459. 最长 V 形对角线段的长度
      • 8/28 3446. 按对角线进行矩阵排序
      • 8/29 3021. Alice 和 Bob 玩鲜花游戏
      • 8/30 36. 有效的数独
      • 8/31 37. 解数独


8/25 498. 对角线遍历

对角线有两种走法
一种斜向上stepx=-1,stepy=1
一种斜向下stepx=1,stepy=-1
更新当前位置x,y
如果x,y在矩阵内 则不需要改变行进方向
如果走出矩阵 则根据x,y位置进行对应更新
特殊判断左下 右上角落情况

def findDiagonalOrder(mat):""":type mat: List[List[int]]:rtype: List[int]"""m,n = len(mat),len(mat[0])ans = []x,y = 0,0sx,sy = -1,1for _ in range(m*n):ans.append(mat[x][y])curx,cury = x+sx,y+sychange = Trueif 0<=curx<m and 0<=cury<n:x = curxy = curychange = Falseelif 0<=curx<m:x +=1elif 0<=cury<n:y +=1else:if curx>0:y +=1if cury>0:x +=1if change:sx = -sxsy = -syreturn ans

8/26 3000. 对角线最长的矩形的面积

依次遍历

def areaOfMaxDiagonal(dimensions):""":type dimensions: List[List[int]]:rtype: int"""cur=0ans=0for x,y in dimensions:if x*x+y*y>=cur:if x*x+y*y==cur:ans=max(ans,x*y)else:ans=x*yreturn ans

8/27 3459. 最长 V 形对角线段的长度

记忆化搜索

def lenOfVDiagonal(grid):""":type grid: List[List[int]]:rtype: int"""steps=[(1,1),(1,-1),(-1,-1),(-1,1)]m,n=len(grid),len(grid[0])mem={}def dfs(x,y,d,turn,target):if (x,y,d,turn,target) in mem:return mem[(x,y,d,turn,target)]nx,ny=x+steps[d][0],y+steps[d][1]if nx<0 or ny<0 or nx>=m or ny>=n or grid[nx][ny]!=target:return 0maxstep = dfs(nx,ny,d,turn,2-target)if turn:maxstep = max(maxstep,dfs(nx,ny,(d+1)%4,False,2-target))mem[(x,y,d,turn,target)]=maxstep+1return maxstep+1ans=0for i in range(m):for j in range(n):if grid[i][j]==1:for d in range(4):ans=max(ans,dfs(i,j,d,True,2)+1)return ans

8/28 3446. 按对角线进行矩阵排序

获得每条对角线数值 排序

def sortMatrix(grid):""":type grid: List[List[int]]:rtype: List[List[int]]"""n=len(grid)for i in range(n):tmp=[grid[i+j][j] for j in range(n-i)]tmp.sort(reverse=True)for j in range(n-i):grid[i+j][j]=tmp[j]for j in range(1,n):tmp=[grid[i][j+i] for i in range(n-j)]tmp.sort()for i in range(n-j):grid[i][j+i]=tmp[i]return grid

8/29 3021. Alice 和 Bob 玩鲜花游戏

要摘完所有花 所以为了A赢 必须x+y为奇数

def flowerGame(n, m):""":type n: int:type m: int:rtype: int"""return m*n//2

8/30 36. 有效的数独

遍历横竖
每一个小格子

def isValidSudoku(board):""":type board: List[List[str]]:rtype: bool"""from collections import defaultdictfor i in range(9):heng,shu =defaultdict(int),defaultdict(int)for j in range(9):if heng[board[i][j]]>0:return Falseif shu[board[j][i]]>0:return Falseif board[i][j]!=".":heng[board[i][j]] = 1if board[j][i]!=".":shu[board[j][i]] = 1m = defaultdict(int)for i in range(3):for j in range(3):if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1m = defaultdict(int)for i in range(3):for j in range(3,6):print(board)if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1 m = defaultdict(int)for i in range(3):for j in range(6,9):if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1m = defaultdict(int)for i in range(3,6):for j in range(3):if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1m = defaultdict(int)for i in range(3,6):for j in range(3,6):if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1 m = defaultdict(int)for i in range(3,6):for j in range(6,9):if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1m = defaultdict(int)for i in range(6,9):for j in range(3):if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1m = defaultdict(int)for i in range(6,9):for j in range(3,6):if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1 m = defaultdict(int)for i in range(6,9):for j in range(6,9):if m[board[i][j]]>0:return Falseif board[i][j]!=".":m[board[i][j]]=1return True

8/31 37. 解数独

rowset[i]维护第i行填入的数字
colset[j]维护第j行数字
boxset[i][j]维护i,j宫内数字
hp维护所有空位置 可以填的数字个数 从最少的可能数位置开始

def solveSudoku(board):""":type board: List[List[str]]:rtype: None Do not return anything, modify board in-place instead."""import heapqrowset=[set() for _ in range(9)]colset=[set() for _ in range(9)]boxset=[[set() for _ in range(3)]for _ in range(3)]eptpos=[]for i,row in enumerate(board):for j,b in enumerate(row):if b=='.':eptpos.append((i,j))else:x=int(b)rowset[i].add(x)colset[j].add(x)boxset[i//3][j//3].add(x)get_candidates = lambda i, j: 9 - len(rowset[i] | colset[j] | boxset[i // 3][j // 3])hp = [(get_candidates(i, j), i, j) for i, j in eptpos]heapq.heapify(hp)def dfs():if not hp:return True_,i,j=heapq.heappop(hp)candi=0for x in range(1,10):if x in rowset[i] or x in colset[j] or x in boxset[i//3][j//3]:continueboard[i][j]=str(x)rowset[i].add(x)colset[j].add(x)boxset[i//3][j//3].add(x)if dfs():return Truerowset[i].remove(x)colset[j].remove(x)boxset[i//3][j//3].remove(x)candi+=1heapq.heappush(hp,(candi,i,j))return Falsedfs()

http://www.xdnf.cn/news/19596.html

相关文章:

  • SciPy
  • DrissionPage 实战:动态 IP 代理与百度翻译 API 数据抓取
  • 硬件开发_基于物联网的工厂环境监测系统
  • Qt Demo之 deepseek 帮我写的关于双目标定的小界面
  • redis----zset详解
  • Langflow Memory 技术深度分析
  • Langflow RAG 技术深度分析
  • 人工智能学习:机器学习相关面试题(二)
  • MySQL-视图与用户管理
  • Langchain指南-关键特性:如何流式传输可运行项
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘SQLModel’问题
  • 案例——从零开始搭建 ASP.NET Core 健康检查实例
  • 齿轮加工刀具材料漫谈:从高速钢到陶瓷的 “切削艺术”
  • 传统数据库out啦!KINGBASE ES V9R1C10 开启国产数据库“修仙”新纪元!
  • Day19_【机器学习—线性回归 (2)】
  • 正则表达式 Python re 库完整教程
  • 生存分析入门教程
  • 馈电油耗讲解
  • AssemblyLoadContext`的插件化架构
  • Qt libcurl的下载、配置及简单测试 (windows环境)
  • springboot项目启动时打印maven打包时间
  • [Mysql数据库] 知识点总结8
  • 计算机网络:(十六)TCP 的运输连接管理
  • Ring Buffer解析
  • 仓颉语言Web框架中的路由分组
  • linux系统学习(6.软件包管理)
  • 十分钟快速掌握 YML YAML 文件
  • 07.《交换机三层功能、单臂路由与端口安全基础知识》
  • 在Linux环境安装Maven(保姆级别)
  • leetcode 面试题 01.01.判定字符是否唯一