用数学的思路来写,先贴代码
和为S的连续正数序列
http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe
import java.util.ArrayList;
import java.util.stream.IntStream;
import static java.util.stream.Collectors.toList;
public class Solution {
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
if (sum < 1) return lists;
return (ArrayList<ArrayList<Integer>>) IntStream.rangeClosed(1, sum / 2).mapToObj(a1 -> new int[]{a1, getN(a1, sum)})
.filter(nums -> nums[1] != 0).map(nums ->
(ArrayList<Integer>) IntStream.rangeClosed(nums[0], nums[0] + nums[1] - 1).boxed().collect(toList())
).collect(toList());
}
public int getN(int a1, int sn) {
int b = 1 - 2 * a1;
double n = (b + Math.sqrt(b * b + 8 * sn)) / 2;
if ((n % 1) < 0.0000001) return (int) n;
return 0;
}
}
查看18道真题和解析