LeetCode 每日一题 2025/12/29-2026/1/4

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


目录

      • [12/29 756. 金字塔转换矩阵](#12/29 756. 金字塔转换矩阵)
      • [12/30 840. 矩阵中的幻方](#12/30 840. 矩阵中的幻方)
      • [12/31 1970. 你能穿过矩阵的最后一天](#12/31 1970. 你能穿过矩阵的最后一天)
      • [1/1 66. 加一](#1/1 66. 加一)
      • [1/2 961. 在长度 2N 的数组中找出重复 N 次的元素](#1/2 961. 在长度 2N 的数组中找出重复 N 次的元素)
      • [1/3 1411. 给 N x 3 网格图涂色的方案数](#1/3 1411. 给 N x 3 网格图涂色的方案数)
      • [1/4 1390. 四因数](#1/4 1390. 四因数)

12/29 756. 金字塔转换矩阵

将一个三角金字塔底部映射

python 复制代码
def pyramidTransition(bottom, allowed):
    """
    :type bottom: str
    :type allowed: List[str]
    :rtype: bool
    """
    n=len(bottom)
    T=[[0]*7 for _ in range(7)]
    for a in allowed:
        l=ord(a[0])-ord('A')
        r=ord(a[1])-ord('A')
        top = ord(a[2])-ord('A')
        T[l][r] |= (1<<top)
    s=set()
    A=[[0]*n for _ in range(n)]
    for i,c in enumerate(bottom):
        A[n-1][i]=ord(c)-ord('A')
        
    def check(state,m,i):
        if m==1 and i==1:
            return True
        elif i==m:
            if state in s:
                return False
            s.add(state)
            return check(0,m-1,0)
        else:
            v = T[A[m][i]][A[m][i+1]]
            for b in range(7):
                if (v>>b)&1:
                    A[m-1][i]=b
                    if check(state*8+(b+1),m,i+1):
                        return True
            return False
    return check(0,n-1,0)

12/30 840. 矩阵中的幻方

检查每个3x3矩阵

python 复制代码
def numMagicSquaresInside(grid):
    """
    :type grid: List[List[int]]
    :rtype: int
    """
    n,m=len(grid),len(grid[0])
    
    def check(a,b,c,d,e,f,g,h,i):
        return sorted([a,b,c,d,e,f,g,h,i])==list(range(1,10)) and (a+b+c==d+e+f==a+d+g==b+e+h==a+e+i==c+e+g==15)
    
    ans=0
    for i in range(n-2):
        for j in range(m-2):
            if grid[i+1][j+1]!=5:
                continue
            if check(grid[i][j],grid[i][j+1],grid[i][j+2],
                     grid[i+1][j],grid[i+1][j+1],grid[i+1][j+2],
                     grid[i+2][j],grid[i+2][j+1],grid[i+2][j+2]):
                ans+=1
    return ans

12/31 1970. 你能穿过矩阵的最后一天

二分 找到刚好能通行的最后一天

python 复制代码
def latestDayToCross(row, col, cells):
    """
    :type row: int
    :type col: int
    :type cells: List[List[int]]
    :rtype: int
    """
    ans=0
    l,r=0,row*col
    while l<=r:
        mid = (l+r)//2
        g=[[1]*col for _ in range(row)]
        for x,y in cells[:mid]:
            g[x-1][y-1]=0
        
        li=[]
        for i in range(col):
            if g[0][i]:
                li.append((0,i))
                g[0][i]=0

        found=False
        while li:
            tmp=[]
            for x,y in li:
                for nx,ny in [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]:
                    if 0<=nx<row and 0<=ny<col and g[nx][ny]:
                        if nx==row-1:
                            found=True
                            break
                        tmp.append((nx,ny))
                        g[nx][ny]=0
            if found:
                break
            li=tmp[:]
        if found:
            ans=mid
            l=mid+1
        else:
            r=mid-1
    return ans

1/1 66. 加一

在最低位+1 如果需要进位则可以继续往下考虑

python 复制代码
def plusOne(digits):
    """
    :type digits: List[int]
    :rtype: List[int]
    """
    n = len(digits)-1
    while n>=0:
        digits[n] +=1
        if digits[n]>9:
            digits[n]=0
        else:
            break
        n-=1
    if digits[0]==0:
        digits = [1]+digits
    return digits

1/2 961. 在长度 2N 的数组中找出重复 N 次的元素

只能有一个数值出现n次 如果某个值出现不止一次就是他

python 复制代码
def repeatedNTimes(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    m={}
    for num in nums:
        if num in m:
            return num
        m[num]=1

1/3 1411. 给 N x 3 网格图涂色的方案数

满足的涂色方案有两类ABA,ABC

dp0表示ABC dp1表示ABA

如果前一行是ABC 这一行是ABC 如012 这一行可以120 201两种

如果前一行是ABC 这一行是ABA 如012 这一行可以101 121两种

如果前一行是ABA 这一行是ABC 如010 这一行可以102 201两种

如果前一行是ABA 这一行是ABA 如010 这一行可以121 101 202三种

dp[i][0]=dp[i-1][0]*2+dp[i-1][1]*2

dp[i][1]=dp[i-1][0]*2+dp[i-1][1]*3

python 复制代码
def numOfWays(n):
    """
    :type n: int
    :rtype: int
    """
    MOD=10**9+7
    dp0,dp1=6,6
    for i in range(2,n+1):
        dp0,dp1=(2*(dp0+dp1))%MOD,(dp0*2+dp1*3)%MOD
    return (dp0+dp1)%MOD

1/4 1390. 四因数

只能有四个因数 出去1和自身

其他两个有两种情况

1.两个需要是素数

2.一个是素数 一个是前一个素数的平方 即该数值为p**3 因数有1,p,pp,p p*p

根据欧拉筛找出所有素数

找到所有四因数的整数

python 复制代码
def sumFourDivisors(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    N=100001
    prime=[]
    isprime=[True]*N
    for i in range(2,N):
        if isprime[i]:
            prime.append(i)
        for p in prime:
            if p*i>=N:
                break
            isprime[p*i]=False
            if i%p==0:
                break
            
    m={}
    for p in prime:
        if p<=46:
            m[p**3] = 1+p+p**2+p**3
        
    for i in range(len(prime)):
        for j in range(i+1,len(prime)):
            if prime[i]*prime[j]<N:
                m[prime[i]*prime[j]]=1+prime[i]+prime[j]+prime[i]*prime[j]
            else:
                break
    ans=0
    for num in nums:
        if num in m:
            print(num,m[num])
            ans+=m[num]
    return ans

相关推荐
ShaderJoy21 小时前
ShaderJoy —— 《对称镜面下的绞肉机》【算法悬疑短文】【Python】
算法·leetcode·面试
智驱力人工智能21 小时前
在安全与尊严之间 特殊人员离岗检测系统的技术实现与伦理实践 高风险人员脱岗预警 人员离岗实时合规检测 监狱囚犯脱岗行为AI分析方案
人工智能·深度学习·opencv·算法·目标检测·cnn·边缘计算
培林将军21 小时前
C语言指针
c语言·开发语言·算法
adam_life21 小时前
P3375 【模板】KMP
算法
jllllyuz21 小时前
基于差分进化算法优化神经网络的完整实现与解析
人工智能·神经网络·算法
yongui4783421 小时前
基于卡尔曼滤波的电池荷电状态(SOC)估计的MATLAB实现
开发语言·算法·matlab
有一个好名字21 小时前
力扣-盛最多水的容器
算法·leetcode·职场和发展
D_FW1 天前
数据结构第二章:线性表
数据结构·算法
技术狂人1681 天前
(六)大模型算法与优化 15 题!量化 / 剪枝 / 幻觉缓解,面试说清性能提升逻辑(深度篇)
人工智能·深度学习·算法·面试·职场和发展