鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 302

[复制链接]
 楼主| 发表于 2020-1-8 21:12:20 | 显示全部楼层
塔利班 发表于 2020-1-8 20:51
来晚了,瞟了眼,

输入空矩阵 [] 报错 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-8 21:15:47 | 显示全部楼层
zltzlt 发表于 2020-1-8 21:12
输入空矩阵 [] 报错 。
  1. def f302(M):
  2.     if not M:
  3.         return M
  4.     J=len(M[0])
  5.     I=len(M)
  6.     if {0,1,2}&{J,I}:
  7.         return M
  8.     res=[['X']*J for _ in range(I)]

  9.     def dp(i,j):
  10.         if i in range(I) and j in range(J) and M[i][j]=='O':
  11.             res[i][j]='O'
  12.             M[i][j]='X'
  13.             dp(i+1,j)
  14.             dp(i-1,j)
  15.             dp(i,j+1)
  16.             dp(i,j-1)

  17.     for i in range(I):
  18.         dp(i,0)
  19.         dp(i,J-1)
  20.     for j in range(J):
  21.         dp(0,j)
  22.         dp(I-1,j)
  23.     return res
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 08:55:11 | 显示全部楼层
本帖最后由 776667 于 2020-1-9 09:46 编辑

有一说一,这题目测空矩阵貌似没有意义吧
  1. def fun302(matrix):

  2.     def near_check(matrix,x,y):
  3.         near = [i for i in [[x-1,y],[x+1,y],[x,y-1],[x,y+1]] if 0 <= i[0] <= len(matrix)-1 and 0 <= i[1] <= len(matrix[x])-1]
  4.         return [i for i in near if matrix[i[0]][i[1]] == 'O']
  5.         
  6.     if not matrix:
  7.         return matrix
  8.     O_zone,nearby,nearby_2 = [],[],[]
  9.     for i in range(len(matrix)):
  10.         if matrix[0][i] == 'O':
  11.             O_zone.append([0,i])
  12.             if near_check(matrix,0,i):
  13.                 nearby = near_check(matrix,0,i)
  14.                 while True:
  15.                     O_zone.extend(nearby)
  16.                     for j in nearby:
  17.                         for n in near_check(matrix,j[0],j[1]):
  18.                             if n not in O_zone:
  19.                                 nearby_2.append(n)
  20.                     if not nearby_2:
  21.                         break
  22.                     nearby,nearby_2 = nearby_2,[]
  23.         if matrix[len(matrix)-1][i] == 'O' and [len(matrix)-1,i] not in O_zone:
  24.             O_zone.append([len(matrix)-1,i])
  25.             if near_check(matrix,len(matrix)-1,i):
  26.                 nearby = near_check(matrix,len(matrix)-1,i)
  27.                 while True:
  28.                     O_zone.extend(nearby)
  29.                     for j in nearby:
  30.                         for n in near_check(matrix,j[0],j[1]):
  31.                             if n not in O_zone:
  32.                                 nearby_2.append(n)
  33.                     if not nearby_2:
  34.                         break
  35.                     nearby,nearby_2 = nearby_2,[]
  36.     for i in range(len(matrix[0])):
  37.         if matrix[i][0] == 'O' and [i,0] not in O_zone:
  38.             O_zone.append([i,0])
  39.             if near_check(matrix,i,0):
  40.                 nearby = near_check(matrix,i,0)
  41.                 while True:
  42.                     O_zone.extend(nearby)
  43.                     for j in nearby:
  44.                         for n in near_check(matrix,j[0],j[1]):
  45.                             if n not in O_zone:
  46.                                 nearby_2.append(n)
  47.                     if not nearby_2:
  48.                         break
  49.                     nearby,nearby_2 = nearby_2,[]
  50.         if matrix[i][len(matrix[0])-1] == 'O' and [i,len(matrix[0])-1] not in O_zone:
  51.             O_zone.append([i,len(matrix[0])-1])
  52.             if near_check(matrix,i,len(matrix[0])-1):
  53.                 nearby = near_check(matrix,i,len(matrix[0])-1)
  54.                 while True:
  55.                     O_zone.extend(nearby)
  56.                     for j in nearby:
  57.                         for n in near_check(matrix,j[0],j[1]):
  58.                             if n not in O_zone:
  59.                                 nearby_2.append(n)
  60.                     if not nearby_2:
  61.                         break
  62.                     nearby,nearby_2 = nearby_2,[]
  63.     for i in range(len(matrix)):
  64.         for j in range(len(matrix[i])):
  65.             if matrix[i][j] == 'O' and [i,j] not in O_zone:
  66.                 matrix[i][j] = 'X'
  67.     return matrix
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-10 05:59:36 | 显示全部楼层
本帖最后由 hrp 于 2020-1-10 06:06 编辑
zltzlt 发表于 2020-1-8 20:20
解答错误

输入:[['X', 'X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X', 'X'], ['X', 'X', 'O', 'O', 'X'] ...


O围成一个圈但外部被X包围,算是被X包围吗
  1. def func302(m):
  2.     if (not m) or (not m[0]):
  3.         return m
  4.     xm, om, tempo = set(), set(), []
  5.     line, row = len(m), len(m[0])
  6.     def find(i, j):
  7.         if ((i, j) in om) or ((i, j) in xm):
  8.             return
  9.         if (i in range(line)) and (j in range(row)):
  10.             if (m[i][j] == 'O') and (not (i, j) in om):
  11.                 om.add((i, j))
  12.                 if (not (i, j) in tempo):
  13.                     tempo.append((i, j))
  14.                     find(i, j-1)
  15.                     find(i-1, j)
  16.                     find(i, j+1)
  17.                     find(i+1, j)
  18.             elif (m[i][j] == 'X') and (not (i, j) in xm):
  19.                 xm.add((i, j))

  20.     for i in range(1, line-1):
  21.         for j in range(1, row-1):
  22.             if (not (i, j) in xm) or (not (i, j) in om):
  23.                 if m[i][j] == 'O':
  24.                     find(i, j)
  25.                     if not False in ((x in range(1, line-1)) and (y in range(1, row-1)) for x, y in tempo):
  26.                         for x, y in tempo:
  27.                             m[x][y] = 'X'
  28.                     tempo.clear()
  29.                 elif m[i][j] == 'X':
  30.                     xm.add((i, j))

  31.     return m
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 01:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表