Pythonのキーと部屋
N個の部屋があり、部屋0から開始するとします。各部屋には0、1、2、...、N-1の異なる番号があり、各部屋は次のようになります。次の部屋にアクセスするためのいくつかの鍵を持っています。つまり、各部屋iにはキーrooms [i]のリストがあり、各キーrooms [i] [j]は[0、1、...、N-1]の整数です。ここでN=の数部屋。キーrooms[i][j] =vの場合、番号vで部屋が開きます。したがって、入力が[[1]、[2]、[3]、[]]の場合。その後、出力はtrueになります。覚えておくべき点が他にもいくつかあります-
- 最初は、すべての部屋がロックされ始めます(部屋0を除く)。
- 部屋の間を自由に行き来できます。
- すべての部屋に入ることができる場合にのみ、trueを返す必要があります。
では、部屋0から開始して、キー1を受け取り、次に部屋1に移動し、2のキーを取得し、2のフォームを作成し、3を訪問した後、3のキーを取得します。訪問してからtrueを返します。
これを解決するには、次の手順に従います-
- 空のキューを1つ作成し、すべての部屋の訪問済み配列を作成して、falseに設定します
- queue:=addRooms(rooms、0、queue、visited)
- visited [0]:=Ture
- キューにはいくつかの要素があります
- queue:=addRooms(rooms、queue [0]、queue、visited)
- visited[queue[0]]をtrueとしてマークします
- キューから要素を削除します
- 訪問した配列のすべての要素がtrueの場合、trueを返します
- addRoom()は、ルーム、インデックス、キュー、および訪問済み配列を取得します。これは次のようになります
- for i in Rooms [index] array
- iにアクセスしていない場合は、iをキューに挿入します
- キューを返す
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def canVisitAllRooms(self, rooms): queue = [] visited = [False for i in rooms] queue = self.add_rooms(rooms,0,queue,visited) visited[0] = True while len(queue)>0: queue = self.add_rooms(rooms,queue[0],queue,visited) visited[queue[0]] = True queue.pop(0) return all(visited) def add_rooms(self, rooms,index,queue,visited): for i in rooms[index]: if not visited[i]: queue.append(i) return queue ob1 = Solution() print(ob1.canVisitAllRooms([[1],[2],[3],[]]))
入力
[[1],[2],[3],[]]
true
-
=+と+=はPythonで何をしますか?
+ =演算子は、object .__ iadd __()関数のシンタックスシュガーです。 Pythonドキュメントから: これらのメソッドは、拡張された算術割り当て(+ =、-=、* =、@ =、/ =、// =、%=、** =、)を実装するために呼び出されます。 =、&=、^ =、| =)。これらのメソッドは、その場で操作を実行し(自己を変更)、結果を返すようにする必要があります(自己である可能性がありますが、そうである必要はありません)。 例 だからあなたが次のようなことをするとき- a = 5 b = 10 a += b print(a) 出力 これにより、出力が得られます- 15
-
キーと値のリストからPython辞書を作成するにはどうすればよいですか?
L1とL2がキーとそれぞれの値を含むリストオブジェクトである場合、次のメソッドを使用して辞書オブジェクトを作成できます。 2つのリストを圧縮し、dict()関数を使用して辞書に変換します >>> L1 = [a,b,c,d] >>> L2 = [1,2,3,4] >>> d = dict(zip(L1,L2)) >>> d {a: 1, b: 2, c: 3, d: 4} 辞書理解構文の使用 >>> L1 = [a,b,c,d] >>> L2 = [1,2,3,4] >&