欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 力扣题51~55

力扣题51~55

2024/10/22 22:02:10 来源:https://blog.csdn.net/SM_zeng/article/details/142993038  浏览:    关键词:力扣题51~55

题51(困难):

分析:

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

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:returnif n==queue_count:#放置第九个皇后if 1 not in free_queue[n-1]:returnelse: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]='.'returnelse: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):#设置纵列为0free_queue_new[n+m][i]=0#设置横列为0(要不要无所谓)if i+m+1<queue_count:free_queue_new[n-1][i+m+1]=0#设置斜率为1的列为0if n+m<queue_count and i+m+1<queue_count:free_queue_new[n+m][i+m+1]=0#设置斜率为-1的列为0if n+m<queue_count and i-m-1>=0:free_queue_new[n+m][i-m-1]=0set_queue(free_queue_new,queue_board_new,n+1)returnfree_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代码:

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:returnif n==queue_count:#放置第九个皇后if 1 not in free_queue[n-1]:returnelse: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]='.'returnelse: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):#设置纵列为0free_queue_new[n+m][i]=0#设置横列为0(要不要无所谓)if i+m+1<queue_count:free_queue_new[n-1][i+m+1]=0#设置斜率为1的列为0if n+m<queue_count and i+m+1<queue_count:free_queue_new[n+m][i+m+1]=0#设置斜率为-1的列为0if n+m<queue_count and i-m-1>=0:free_queue_new[n+m][i-m-1]=0set_queue(free_queue_new,queue_board_new,n+1)returnfree_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代码:

class Solution:def maxSubArray(self, nums: List[int]) -> int:#不用看也是动态规划啊,每一个现状等于之前状态加判断res=0n_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代码:

class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:row=len(matrix)col=len(matrix[0])cout=row*colres=[]#选则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-1i=0while i<cout:res.append(matrix[y][x])if x==right and y==top:#到右上if p_x==1:top+=1p_x,p_y=0,1passif x==right and y==bottom:#到右下if p_y==1:right-=1p_x,p_y=-1,0passif x==left and y==top:#到左上if p_y==-1:left += 1p_x,p_y=1,0passif x==left and y==bottom:#到左下if p_x==-1:bottom-=1p_x,p_y=0,-1passx+=p_xy+=p_yi+=1return res

题55(中等):

分析:

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

python代码:

class Solution:def canJump(self, nums: List[int]) -> bool:n_len=len(nums)end,max_jump=0,0for i in range(n_len):if i>end:return Falsemax_jump=max(max_jump,i+nums[i])if max_jump>=n_len-1:return Trueif i==end:end=max_jump

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com