ふたつ引いてから足す


🔗 質問リンク


https://programmers.co.kr/learn/courses/30/lessons/68644

問題の説明


整数配列番号.numbersから異なるインデックスの2つの数を抽出し、作成できるすべての数を昇順に配列に入れ、solution関数の戻りを完了してください.

⚠▼制限


  • numbersの長さは2または100以下です.

  • numbersのすべての数字は0または100以下です.
  • 💡 プール(言語:Java)


    簡単な二重複文でも条件は厳しくなく、成功できる問題ですが、組み合わせで解決できるので勉強しました.アルゴリズムは,DFSを用いて2つの場合に分岐を続け,2つの数字があるまでリストに同じ値があるかどうかを決定し,ない場合は入れ,最後にソートして返す.コンビネーションは順序に関係のない選択数であるため、各選択の順序は対応するインデックス数を選択するか、選択しないか、2つの状況に分けて再帰関数を呼び出し続けます.数値が2つまたは長さが整数の場合に終了します.
    class Solution {
        ArrayList<Integer> answer = new ArrayList<>();
    
        public void dfs(int idx, int cnt, int sum, int[] numbers) {
            if (cnt == 2) {
                if (!answer.contains(sum))
                    answer.add(sum);
                return;
            }
            if (idx != numbers.length) {
                dfs(idx + 1, cnt + 1, sum + numbers[idx], numbers);
                dfs(idx + 1, cnt, sum, numbers);
            }
        }
    
        public ArrayList<Integer> solution(int[] numbers) {
            dfs(0, 0, 0, numbers);
            Collections.sort(answer);
            return answer;
        }
    }