美文网首页
剑指Offer-39 序列和(数组)

剑指Offer-39 序列和(数组)

作者: 北国雪WRG | 来源:发表于2019-01-15 16:27 被阅读0次

输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

设该数为sum,设置分Count 份,平均数ava = sum / count;,小数flag = (sum % count) / (double) count;
分析可知:

Count 小数flag 是否存在序列
偶数 0 不存在
偶数 0.5 存在
奇数 0 不存在
奇数 0.5 不存在
public class Solution {
    public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
        int count = 2; // 数字的数量
        int ava = sum / count; //整数部分
        double flag = (sum % count) / (double) count; // 小数部分
        ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
        while (true) {
            if (flag == 0d && count % 2 != 0) {
                int begin = ava - (count - 1) / 2;
                int end = ava + (count - 1) / 2;
                if(begin <=0 ) break;
                ArrayList<Integer> list = new ArrayList<>();
                for (int i = begin; i <= end; i++)
                    list.add(i);
                ans.add(0,list);
            } else if (flag == 0.5 && count % 2 == 0) {
                int begin = ava + 1 - count / 2;
                int end = ava + count / 2;
                if(begin <=0 ) break;
                ArrayList<Integer> list = new ArrayList<>();
                for (int i = begin; i <= end; i++) {
                    list.add(i);
                }
                ans.add(0,list);
            }
            count++;
            ava = sum / count;
            flag = (sum % count) / (double) count;
        }
        return ans;
    }
}

相关文章

网友评论

      本文标题:剑指Offer-39 序列和(数组)

      本文链接:https://www.haomeiwen.com/subject/ksuydqtx.html