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

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.dtcms.com/a/360461.html

相关文章:

  • 模拟在线测试六线测试相关知识
  • 如何快速学习新技能
  • io进程线程;标准IO;0831
  • Java全栈开发面试实录:从基础到微服务架构的深度解析
  • Augment 宣布 Auggie CLI正式向所有用户开放
  • 利用DeepSeek编写验证xlsx格式文件中是否启用sharedStrings.xml对读写效率影响python程序
  • Ring Buffer解析
  • Thread、ThreadLocal、ThreadLocalMap
  • 用户态 kill 与 pthread_kill 的区别?
  • 动态链表:结构体模拟单链表的终极指南
  • ts 定义类型
  • Linux学习:简单模拟实现C++中的线程类
  • C++算法学习专题:前缀和
  • 【Linux网络编程】应用层协议-----HTTP协议
  • PostgreSQL表膨胀的危害与解决方案
  • More Effective C++ 条款19:理解临时对象的来源(Understand the Origin of Temporary Objects)
  • centos 7 安装docker、docker-compose教程
  • AI 编程新玩法:用 yunqi-saas-kit 框架制作小游戏,看广告变现轻松赚钱​
  • 国产数据库之TiDB:博采众长
  • Ruoyi-vue-plus-5.x第二篇MyBatis-Plus数据持久层技术:2.2 分页与性能优化
  • [嵌入式embed]Keil5项目提示Missing: Compiler Version 5
  • 工业互联项目总结:UART
  • Backroom:信息代币化 AI 时代数据冗杂的解决方案
  • 漏洞基础与文件包含漏洞原理级分析
  • 使用 Python mlxtend库进行购物篮分析、关联规则
  • 软考中级习题与解答——第一章_数据结构与算法基础(3)
  • 进程状态 —— Linux内核(Kernel)
  • Linux 文件夹权限也会导致基本命令权限缺失问题
  • 【学Python自动化】 5. Python 数据结构学习笔记
  • postman带Token测试接口