美文网首页
COMP9021-Lectures final question

COMP9021-Lectures final question

作者: BlueSkyBlue | 来源:发表于2018-05-29 21:53 被阅读34次

题目:

给定一串数字(arrays)和一个指定的数(num),求出这串数字中和为指定的数(num)的子串集合。

举例:
arrays: 1, 2, 3, 4, 5, 6
num: 6
结果: [1, 2, 3], [1, 5], [2, 4], [6]


思路:

此题可以使用递归和回溯的思想解决。

  • 首先需要将给定的数组进行正序排序。Java提供了Arrays.sort()可以很方便的实现数组的正序排序。
  • 从给定的数字的第一个数字开始,将它计入到一个ArrayList中,同时设一个int类型的变量sum用来记录遍历过的数字的和(ArrayList中所有数字的和)。
  • 一旦和sum等于指定的数num就将此时的ArrayList记录到最终的结果中。记得需要对sumArrayList进行剪枝操作。假设咱们此时找到1,2,3满足条件此时需要减去3,看看后面的4和1,2相加是否满足条件。
  • sum < num的时候继续寻找下一个数重复同样的过程。使用递归进行查找。同样不要忘记剪枝。
  • sum > num的时候返回到递归的上一层。

代码:

/**
     * Find arrays whose sum is specified sum.
     * @param arrays
     * @param sum
     * @return
     */
    public ArrayList<String>solution(int [] arrays, int sum){
        ArrayList<String>results = new ArrayList<String>();
        ArrayList<Integer>result = new ArrayList<Integer>();
        Arrays.sort(arrays);
        recursive(arrays, sum, 0, 0, results, result);
        return results;
    }
    
    /**
     * Recursion to find sub-arrays meeting the requirement.
     * @param arrays
     * @param sum
     * @param nsum
     * @param k
     * @param results
     * @param result
     */
    private void recursive(int [] arrays, int sum, int nsum, int k, ArrayList<String>results, ArrayList<Integer>result){
        for(int i=k;i<arrays.length;i++){
            nsum += arrays[i];
            if(nsum == sum){
                result.add(arrays[i]);
                String str = String.valueOf(result);
                results.add(str);
                nsum -= arrays[i];
                result.remove(result.size() - 1);
                return;
            }else if(nsum < sum){
                result.add(arrays[i]);
                recursive(arrays, sum, nsum, i+1, results, result);
                nsum -= arrays[i];
                result.remove(result.size() - 1);
            }else{
                return;
            }
        }
    }

相关文章

  • COMP9021-Lectures final question

    题目: 给定一串数字(arrays)和一个指定的数(num),求出这串数字中和为指定的数(num)的子串集合。 举...

  • JAVA 小知识点记录 (一)

    Question 1.关于try catch final 执行顺序问题: try catch final 结论 1...

  • object - toString自动调用?when print

    review for final of CSE142 first question: ReferenceMyste...

  • 2.3Concept dictionary part 6

    1what is life final question? when i was growingup, i hea...

  • Java 面试题

    String类为什么是final的。 答案:https://www.zhihu.com/question/3134...

  • question

    1.铜锈的存在会不会加快青铜器的腐蚀 2.癌细胞可以无限繁殖,那能否可以改变原有细胞使其无限繁殖 3.在高二的时候...

  • Question is

    Question is 我们都没办法放弃自己,迎合对方。当维持一段关系让你觉得很累的时候,就放手。 错过,是有原因...

  • A question

    我不知道我们是怎么了,就突然间好像陌生人一样,却又保持了一种联系。我们不再联络对方,不会再在深夜里聊起只有我们自己...

  • Question

    Q004-Unity 2D 游戏屏幕大小应该如何选择? Q003-在 PC、Android、iPhone 上怎么 ...

  • That is not a question!

    和芳宇姐打了将近一个小时电话,收获了太多,思考了太多,意识到了太多,相信这这会是自己的一个转折点,一个从简单...

网友评论

      本文标题:COMP9021-Lectures final question

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