Pythonに演算子を配置して24を形成できるかどうかを確認するプログラム
4つの番号のリストがあり、各番号は1から9の範囲で、固定された順序であるとします。ここで、演算子+、-、*、および/(/は整数の除算を示します)を数値の間に配置し、それらを角かっこでグループ化する場合、値24を取得できるかどうかを確認する必要があります。
したがって、入力がnums =[5、3、6、8、7]のような場合、出力は(5 * 3)-6 +(8 + 7)=24のようにTrueになります。
これを解決するには、次の手順に従います-
- 関数recur()を定義します。これには時間がかかります
- 回答:=新しいリスト
- 範囲0からarr-1のサイズのiの場合、do
- pre:=recur(arr [インデックス0からi])
- suf:=recur(arr[インデックスi+ 1から終了まで])
- preのkごとに、
- sufの各jについて、
- 回答の最後に(k + j)を挿入
- 回答の最後に(k-j)を挿入
- 回答の最後に(k * j)を挿入
- jが0でない場合、
- 回答の最後に(k / jの商)を挿入します
- sufの各jについて、
- 回答のサイズが0で、arrのサイズが1の場合、
- 回答の最後にarr[0]を挿入
- 回答を返す
- メインメソッドから、24がrecur(nums)にあるかどうかを確認し、はいの場合はTrueを返し、そうでない場合はfalseを返します
理解を深めるために、次の実装を見てみましょう-
例
class Solution: def solve(self, nums): def recur(arr): answer = [] for i in range(len(arr) - 1): pre, suf = recur(arr[: i + 1]), recur(arr[i + 1 :]) for k in pre: for j in suf: answer.append(k + j) answer.append(k - j) answer.append(k * j) if j != 0: answer.append(k // j) if len(answer) == 0 and len(arr) == 1: answer.append(arr[0]) return answer return 24 in recur(nums) ob = Solution() nums = [5, 3, 6, 8, 7] print(ob.solve(nums))
入力
[5, 3, 6, 8, 7]
出力
True
-
Pythonでノードを交換することで2つのツリーを形成できるかどうかを確認するプログラム
2つのツリーがあるとすると、ノードの左右のサブツリーを何度でも交換して、最初のツリーを2番目のツリーに変換できるかどうかを確認する必要があります。 したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するには、次の手順に従います- que1:=最初はroot0のキュー que2:=最初はroot1のキュー que1とque2は空ではありませんが、実行してください temp1:=新しいリスト、temp2:=新しいリスト values1:=新しいリスト、values2:=新しいリスト que1とque2に含まれる要素の数が
-
Pythonのインデックス0から最後の位置に到達できるかどうかを確認するプログラム
numsという数字のリストがあり、各数字はジャンプできる最大数を示しているとします。インデックス0から始まる最後のインデックスに到達できるかどうかを確認する必要があります。 したがって、入力がnums =[2,5,0,2,0]のような場合、インデックス0から1にジャンプしてから、インデックス1から終了にジャンプできるため、出力はTrueになります。 これを解決するために、次の手順に従います- n:=numsのサイズ arr:=サイズnの配列で、falseで埋める arr [n-1]:=True n-2から0の範囲のiの場合、1ずつ減らします。 arr [i]