筆試結束兩分鐘得到正確答案的DFS題目

把數組分成m組,每組不能有重複元素,共可分多少組?

筆試結束兩分鐘後得到正確答案,太遺憾了。

import java.util.*;

public class Main {

    /*請完成下面這個函數,實現題目要求的功能
    當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^
    ******************************開始寫代碼******************************/
    public static int res = 0;
    public static int staticM;

    static int calc(int[] nums, int m) {
        int[] tmp = new int[staticM];
        helper(nums, 0, tmp, 0, staticM);
        return res;
    }

    static void helper(int[] nums, int start, int[] tmp, int level, int m) {
        int len = nums.length - start;
        // 第一位和的個數
        for (int count = len+1-m; count >= 1; count--) {
            // 終止條件
            if (level == staticM-1) {
                System.out.println();
                if (check(tmp) && ((start+count-1) == nums.length-1)) {
                    res++;
                }
                return;
            }
            int sum = calSum(nums, start, start+count-1);
            tmp[level] = sum;
            helper(nums, start+count, tmp, level+1, m-1);
        }
    }

    static int calSum(int[] num, int start, int end) {
        int sum = 0;
        for (int i = start; i <= end; i++) {
            sum += num[i];
        }
        return sum;
    }

    static boolean check(int[] res) {
        Set<Integer> set = new HashSet<>();
        for (Integer num : res) {
            if (set.contains(num)) {
                return false;
            } else {
                set.add(num);
            }
        }
        return true;
    }
    /******************************結束寫代碼******************************/


    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int res;

        int _nums_size = 0;
        _nums_size = Integer.parseInt(in.nextLine().trim());
        int[] _nums = new int[_nums_size];
        int _nums_item;
        for(int _nums_i = 0; _nums_i < _nums_size; _nums_i++) {
            _nums_item = Integer.parseInt(in.nextLine().trim());
            _nums[_nums_i] = _nums_item;
        }

        int _m;
        _m = Integer.parseInt(in.nextLine().trim());
        staticM = _m;
        res = calc(_nums, _m);
        System.out.println(String.valueOf(res));

    }



}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章