力扣题51~55

题51(困难):

分析:

递归金典题:N皇后问题,搞过扫雷游戏就很简单了

python代码:

python 复制代码
class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        #n 皇后问题--》非线性--》选递归,
        res=[]
        queue_count=n


        #设置皇后,递归函数,传当前可行位置+放置第几个
        def set_queue(free_queue,queue_board,n):
            if n<=0 or n>queue_count:
                return
            if n==queue_count:#放置第九个皇后
                if 1 not in free_queue[n-1]:
                    return
                else:
                    for i in range(queue_count):
                        if free_queue[n-1][i]==1:
                            queue_board[n-1][i]='Q'
                            res.append([''.join(i.copy()) for i in queue_board])
                            queue_board[n-1][i]='.'
                            return
            else:
                for i in range(queue_count):
                    if free_queue[n-1][i]==1:
                        free_queue_new = [i.copy() for i in free_queue]
                        queue_board_new = [i.copy() for i in queue_board]
                        queue_board_new[n-1][i]='Q'
                        for m in range(queue_count-n):
                            #设置纵列为0
                            free_queue_new[n+m][i]=0
                            #设置横列为0(要不要无所谓)
                            if i+m+1<queue_count:
                                free_queue_new[n-1][i+m+1]=0
                            #设置斜率为1的列为0
                            if n+m<queue_count and i+m+1<queue_count:
                                free_queue_new[n+m][i+m+1]=0
                            #设置斜率为-1的列为0
                            if n+m<queue_count and i-m-1>=0:
                                free_queue_new[n+m][i-m-1]=0
                        set_queue(free_queue_new,queue_board_new,n+1)
                return


        free_queue=[[1 for i in range(queue_count)] for j in range(queue_count)]
        queue_board=[['.' for i in range(queue_count)] for j in range(queue_count)]
        set_queue(free_queue,queue_board,1)

        return res

题52(困难):

分析:

解决了上一题,这题就是送啊

python代码:

python 复制代码
class Solution:
    def totalNQueens(self, n: int) -> int:
        #n 皇后问题--》非线性--》选递归,
        res=[]
        queue_count=n


        #设置皇后,递归函数,传当前可行位置+放置第几个
        def set_queue(free_queue,queue_board,n):
            if n<=0 or n>queue_count:
                return
            if n==queue_count:#放置第九个皇后
                if 1 not in free_queue[n-1]:
                    return
                else:
                    for i in range(queue_count):
                        if free_queue[n-1][i]==1:
                            queue_board[n-1][i]='Q'
                            res.append([''.join(i.copy()) for i in queue_board])
                            queue_board[n-1][i]='.'
                            return
            else:
                for i in range(queue_count):
                    if free_queue[n-1][i]==1:
                        free_queue_new = [i.copy() for i in free_queue]
                        queue_board_new = [i.copy() for i in queue_board]
                        queue_board_new[n-1][i]='Q'
                        for m in range(queue_count-n):
                            #设置纵列为0
                            free_queue_new[n+m][i]=0
                            #设置横列为0(要不要无所谓)
                            if i+m+1<queue_count:
                                free_queue_new[n-1][i+m+1]=0
                            #设置斜率为1的列为0
                            if n+m<queue_count and i+m+1<queue_count:
                                free_queue_new[n+m][i+m+1]=0
                            #设置斜率为-1的列为0
                            if n+m<queue_count and i-m-1>=0:
                                free_queue_new[n+m][i-m-1]=0
                        set_queue(free_queue_new,queue_board_new,n+1)
                return


        free_queue=[[1 for i in range(queue_count)] for j in range(queue_count)]
        queue_board=[['.' for i in range(queue_count)] for j in range(queue_count)]
        set_queue(free_queue,queue_board,1)

        return len(res)

题53(中等):

分析:

python代码:

python 复制代码
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        #不用看也是动态规划啊,每一个现状等于之前状态加判断
        res=0
        n_len=len(nums)
        n_list=[0 for i in range(n_len)]
        for i in range(n_len):
            n_list[i]=max(nums[i],n_list[i-1]+nums[i])
        res=max(n_list)
        return res

题54(中等):

分析:

会搞贪吃蛇小游戏的一个很清晰怎么搞

python代码:

python 复制代码
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        row=len(matrix)
        col=len(matrix[0])
        cout=row*col
        res=[]
        #选则x,y作为当前位置
        x,y=0,0
        #和贪吃蛇一样选则p_x,p_y作为前进的方向
        p_x,p_y=1,0
        #定义终止转弯点
        left,right,top,bottom=0,col-1,0,row-1
        i=0
        while i<cout:
            res.append(matrix[y][x])
            if x==right and y==top:
                #到右上
                if p_x==1:
                    top+=1
                    p_x,p_y=0,1
                pass
            if x==right and y==bottom:
                #到右下
                if p_y==1:
                    right-=1
                    p_x,p_y=-1,0
                pass
            if x==left and y==top:
                #到左上
                if p_y==-1:
                    left += 1
                    p_x,p_y=1,0
                pass
            if x==left and y==bottom:
                #到左下
                if p_x==-1:
                    bottom-=1
                    p_x,p_y=0,-1
                pass
            x+=p_x
            y+=p_y
            i+=1
        return res

题55(中等):

分析:

之前没想到贪心,这次直接用贪心算法,(因为动态规划为n^2,时间复杂度高)

python代码:

python 复制代码
class Solution:
    def canJump(self, nums: List[int]) -> bool:
        n_len=len(nums)
        end,max_jump=0,0
        for i in range(n_len):
            if i>end:
                return False
            max_jump=max(max_jump,i+nums[i])
            if max_jump>=n_len-1:
                return True
            if i==end:
                end=max_jump
相关推荐
凌肖战2 小时前
力扣网编程55题:跳跃游戏之逆向思维
算法·leetcode
黑听人3 小时前
【力扣 简单 C】70. 爬楼梯
c语言·leetcode
88号技师3 小时前
2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
ゞ 正在缓冲99%…4 小时前
leetcode918.环形子数组的最大和
数据结构·算法·leetcode·动态规划
Kaltistss5 小时前
98.验证二叉搜索树
算法·leetcode·职场和发展
知己如祭5 小时前
图论基础(DFS、BFS、拓扑排序)
算法
mit6.8245 小时前
[Cyclone] 哈希算法 | SIMD优化哈希计算 | 大数运算 (Int类)
算法·哈希算法
c++bug5 小时前
动态规划VS记忆化搜索(2)
算法·动态规划
哪 吒5 小时前
2025B卷 - 华为OD机试七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
python·算法·华为od·华为od机试·2025b卷
军训猫猫头6 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net