ふたつ引いてから足す
🔗 質問リンク
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;
}
}
Reference
この問題について(ふたつ引いてから足す), 我々は、より多くの情報をここで見つけました https://velog.io/@shiningcastle/두-개-뽑아서-더하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol