57.92パーセントをmycode
クラス溶液(オブジェクト): DEF numIslands(自己、グリッド): "" " :タイプグリッド:リスト[リスト[STR] :RTYPE:INT """ DEF 再帰(I、J、行、列): もし I> = 0 および iが<行と J> = 0 と <J :COL もしグリッド[I] [J]を== ' 0 ' : リターン グリッド[I] [J] = ' 0 ' であれば、I-1> = 0: 再帰(I -1 、J、行、 COL)もし I + 1 < 行: 再帰(I +1 、J、行、列) 場合、J-1> = 0: 再帰(I、J -1 、行、列) 場合、J + 1 <= COL: 再帰(I 、J +1 、行、列) 他: リターン なら ない:グリッド 戻り0 行 = LEN(グリッド) COL = LEN(グリッド[0]) のための I における範囲(行) のためにJ における範囲(COL): もしグリッド[I] [J] == ' 1 ' : #プリント( 'もし..'、グリッド) 再帰(I、J、行、列) グリッド[I] [J] = ' 1 ' #の印刷( 'もし..'、グリッド)を カウント= 0 のための I における範囲(行) のために、J における範囲(COL): もしグリッド[I] [J] == ' 1 ' : カウント + = 1つの 復帰 カウント
参考:
アイデア:実際には、第二サイクルは不要であるため、それは前にカウントすることができます
クラスソリューション: DEF numIslands(自己、グリッド): "" " :タイプグリッド:リスト[リスト[STR] :RTYPE:INT """ RES = 0 のための R における範囲(LEN(グリッド)) のために C で範囲(LEN(グリッド[0])): もしグリッド[R] [C] == " 1 " : self.dfs(グリッド、R、C) RES + = 1つの 戻りRES DEF DFS(自己、グリッド、I、J ): DIRS = [-1、0]、[0、1]、[0、-1]、[1、0] グリッド[I] [J] = " 0 " のための DIR にDIRS: NR、NC = iは、DIR + [0]、J + DIR [1 ] であれば NRが> = 0 と NC> = 0 及び NR < LEN(グリッド)と NC < LEN(グリッド[0]): もしグリッド[NR] [NC] == " 1 " : self.dfs(グリッド、NR、NC)