配列に合計が存在するかどうかを判断するメソッドがあります。したがって、ルールには3つの数字が配列内に存在していなければならず、すべてを一緒に加算すると合計に等しくなります。だから、配列{1,2,3,14,12}で6の和を探していたら、2 + 3 + 1は私に6を与える数字になります。オンラインで調べることで、私はS1、S2の意義が何であるかを理解しない配列内の3つの数値が合計に加算されるかどうかを調べる
public void existsSum(int[] numbers,int sum){
Set<Integer> set = new HashSet();
for(int i=0;i<numbers.length;i++){
int s1=sum - numbers[i];
for(int j=0;j<numbers.length;j++){
int s2=s1-numbers[j];
if(set.contains(s2)) {
System.out.format("sum of %d + %d + %d gives %d \n", numbers[i], numbers[j],s2, sum);
assert(numbers[i]+numbers[j]+s2==10);
}
}
set.add(numbers[i]);
}
}
:私は動作しますが、イムは、ロジックを理解するに苦労して、以下の機能がありますか?誰かが論理を私に説明することができます。この方法自体は正常に動作し、私は次のようにそれを実行した場合、それは正しい結果が得られます
int[] integers = {1,2,3,4,5,6,7,8,9};
existsSum(integers,10);
sum of 2 + 7 + 1 gives 10
sum of 3 + 5 + 2 gives 10
sum of 3 + 6 + 1 gives 10
sum of 4 + 3 + 3 gives 10
sum of 4 + 4 + 2 gives 10
sum of 4 + 5 + 1 gives 10
sum of 5 + 1 + 4 gives 10
sum of 5 + 2 + 3 gives 10
sum of 5 + 3 + 2 gives 10
sum of 5 + 4 + 1 gives 10
sum of 6 + 1 + 3 gives 10
sum of 6 + 2 + 2 gives 10
sum of 6 + 3 + 1 gives 10
sum of 7 + 1 + 2 gives 10
sum of 7 + 2 + 1 gives 10
sum of 8 + 1 + 1 gives 10
外側のループは、最後の要素までのすべての道を行かなければならないのはなぜ? –
@BheshGurungなぜか?彼らはどこで止めるべきだとお考えですか? – Dima