プログラマ-ターゲット番号[lv 2](DFS)


🏄‍♂️ 問題の説明



制限



🏕️ I/O例



🏃‍♂️ ソリューション


これは
  • BFS/DFSを学習した後の最初の問題である.
  • アレイが[1, 2, 3]であると仮定すると、すべての可能な計算数は
  • である.
    //図
  • 要素ごとに2つの計算を分割する方法は知られているが,DFSで解く方法は考えられなかった.
  • したがって、他のソースを参照して学習し、その後、解答を行う.
  • は、単にDFSを介して最下位ノードに到達した後、目標値と比較してcountする.
  • 🧑🏻‍💻 コード#コード#

    def solution(numbers, target):
        l = len(numbers)
        cnt = 0
        
        def dfs(idx,s=0):
            if idx == l:
                if s == target:
                    nonlocal cnt
                    cnt += 1
            dfs(idx+1,s+numbers[idx])
            dfs(idx+1,s-numbers[idx])
        dfs(0)
        return (cnt)
  • 配列の最初のインデックスから、dfsは1つずつ実行される.
  • 1の要素[i]は、[+i]および[-i]に分けることができ、したがって、2回のdfsが実行される.
  • noneLocal

  • 関数の真上の値を使用します.
  • dfs関数にはnonlocal cntが使用されているので、溶液関数のcnt値を使用することができる.
  • 💁‍♂️ 結果


  • はまだ再帰関数に詳しくなく,構造を理解するのに長い時間がかかる.
  • を完璧に理解するために、私はもっと多くの問題を解く必要があります.