用数学的思路来写,先贴代码

和为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;
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务