回溯法

題目大意:

??給一個(gè)正整數(shù)列表alist和指定正整數(shù)T,不限定每個(gè)數(shù)的使用次數(shù),返回任意元素相加之和等于指定數(shù)的所有組合的鏈表。形如:alist = [1,3,6,4,2,7] T = 8 ,返回鏈表[[1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 3], [1, 1, 1, 4], [1, 1, 1, 2, 2], [1, 1, 3, 2], [1, 3, 3], [1, 6], [1, 4, 2], [1, 2, 2, 2], [3, 4], [3, 2, 2], [7]]。

思路:

??使用回溯法(不撞南墻不回頭,一旦撞了墻,就該按照原路回頭了)

代碼實(shí)現(xiàn):

package com.lm.main.searching;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class GettingList2 {
    private List<List<Integer>> result = new ArrayList<>();
    private LinkedList<Integer> cur = new LinkedList<>();

    private void DFS(int[] arr, int pos, int curSum, int sum) {
        if (pos == arr.length) {
            return;
        }

        cur.add(arr[pos]);

        if (curSum == sum) {
            result.add(new ArrayList<>(cur));
            return;
        }
        if (curSum > sum) {
            return;
        }

        for (int i = pos; i < arr.length; i++) {
            DFS(arr, i, curSum + arr[i], sum);
            cur.removeLast();
        }
    }

    public List<List<Integer>> getResult(int[] arr, int target) {
        if (arr == null || arr.length == 0) {
            return result;
        }
        for (int i = 0; i < arr.length; i++) {
            cur.clear();
            DFS(arr, i, arr[i], target);
        }
        return result;
    }

    public static void main(String[] args) {
        int[] arr = {1, 3, 6, 4, 2, 7};
        GettingList2 m = new GettingList2();
        List<List<Integer>> result = m.getResult(arr, 7);
        System.out.println(result);
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)題描述: 辰辰是個(gè)天資聰穎的孩子,他的夢(mèng)想是成為世界上最偉大的醫(yī)師。為此,他想拜附近最有威望的醫(yī)師為師。醫(yī)師為了...
    mztkenan閱讀 558評(píng)論 0 0
  • 回溯法與分支限界法 時(shí)間 2016-03-24 標(biāo)簽 搜索 回溯法 1、概念 回溯算法實(shí)際上一個(gè)類(lèi)似枚舉的搜索嘗...
    wangchuang2017閱讀 2,356評(píng)論 0 4
  • backtracking in a glance 首先系統(tǒng)地介紹一下backtracking這個(gè)方法本質(zhì)是建立在遞...
    dol_re_mi閱讀 6,280評(píng)論 0 10
  • 成龍大哥竟然也拍起了抗日神劇,大哥可能真到了歲數(shù),有點(diǎn)打不動(dòng)了,開(kāi)始拍一些輕松搞笑劇,用計(jì)謀代替拳頭。結(jié)尾處華哥也...
    芥空閱讀 494評(píng)論 0 0
  • 喜歡他已經(jīng)很長(zhǎng)很長(zhǎng)時(shí)間了,時(shí)間長(zhǎng)到我都不知道這到底是真的喜歡的是他這個(gè)人,還是只是習(xí)慣了去喜歡他。漸漸的,喜歡他成...
    西門(mén)洛瞳閱讀 3,699評(píng)論 0 0