国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[LintCode] k Sum II [Backtracking]

tabalt / 666人閱讀

摘要:當(dāng)?shù)拇笮闀r(shí),若也正好減小為,說明當(dāng)前路徑是正確的結(jié)果之一存入新的數(shù)組,再將放入。在循環(huán)遞歸之后,將中最后一個(gè)放入的元素刪除,以在當(dāng)前循環(huán)內(nèi)繼續(xù)替換和遞歸。

Problem

Given n unique integers, number k (1<=k<=n) and target.

Find all possible k integers where their sum is target.

Example

Given [1,2,3,4], k = 2, target = 5. Return:

[
  [1,4],
  [2,3]
]
Note

這道題不能用k Sum的做法,因?yàn)橐祷氐氖墙Y(jié)果的集合,而不是數(shù)目或者最優(yōu)解。
我們使用回溯算法,建立helper函數(shù)。從curIndex開始循環(huán),將循環(huán)到的值A[i]加入curList,然后基于這個(gè)curList繼續(xù)遞歸,不過要調(diào)整targetcurIndextarget減小A[i]curIndex增加1位。當(dāng)curList的大小為k時(shí),若target也正好減小為0,說明當(dāng)前路徑curList是正確的結(jié)果之一:存入新的數(shù)組temp,再將temp放入res。在循環(huán)遞歸之后,將curList中最后一個(gè)放入的元素刪除,以在當(dāng)前循環(huán)內(nèi)繼續(xù)替換和遞歸。
復(fù)雜度為O(n^k)

Solution
public class Solution {
    public ArrayList> kSumII(int[] A, int k, int target) {
        ArrayList> res = new ArrayList();
        helper(A, k, target, 0, res, new ArrayList());
        return res;
    }
    public void helper(int[] A, int k, int target, int curIndex, ArrayList> res, ArrayList curList) {
        if (curList.size() == k) {
            if (target == 0) {
                ArrayList temp = new ArrayList(curList);
                res.add(temp);
            }
            return;
        }
        for (int i = curIndex; i < A.length; i++) {
            curList.add(A[i]);
            helper(A, k, target-A[i], i+1, res, curList);
            curList.remove(curList.size()-1);
        }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65824.html

相關(guān)文章

  • LintCode Coins in a line III

    摘要:復(fù)雜度思路參考的思路,對于,表示在從到的范圍內(nèi),先手玩家能拿到的最大的硬幣價(jià)值。對于狀態(tài),先手玩家有兩種選擇,要么拿的硬幣,要么拿的硬幣左邊一個(gè)的或者右邊一側(cè)的,如果拿左側(cè)的硬幣,如果拿右側(cè)的硬幣,取兩個(gè)值的最大值。 LintCode Coins in a line III There are n coins in a line. Two players take turns to ...

    focusj 評論0 收藏0
  • [LintCode] Build Post Office I & II

    Build Post Office Problem Given a 2D grid, each cell is either an house 1 or empty 0 (the number zero, one), find the place to build a post office, the distance that post office to all the house sum i...

    1treeS 評論0 收藏0
  • leetcode216. Combination Sum III

    摘要:題目要求輸入和,找到所有個(gè)不同數(shù)字的組合,這些組合中數(shù)字的和為參考,解答這是一道典型的的題目,通過遞歸的方式記錄嘗試的節(jié)點(diǎn),如果成功則加入結(jié)果集,如果失敗則返回上一個(gè)嘗試的節(jié)點(diǎn)進(jìn)行下一種嘗試。 題目要求 Find all possible combinations of k numbers that add up to a number n, given that only numbe...

    awokezhou 評論0 收藏0
  • leetcode22. Generate Parentheses

    摘要:當(dāng)右括號和左括號的剩余量均為時(shí),及為一個(gè)最終結(jié)果。而則會在直接原來的對象上進(jìn)行修改,其指針仍然指向原來的對象。因此在遞歸的過程中使用一定要注意,對對象的修改不要相互干擾。 題目要求 Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses....

    騫諱護(hù) 評論0 收藏0
  • Lintcode Coins in a line II

    摘要:兩個(gè)參賽者輪流從左邊依次拿走或個(gè)硬幣,直到?jīng)]有硬幣為止。計(jì)算兩個(gè)人分別拿到的硬幣總價(jià)值,價(jià)值高的人獲勝。請判定第一個(gè)玩家是輸還是贏樣例給定數(shù)組返回給定數(shù)組返回復(fù)雜度思路考慮先手玩家在狀態(tài),表示在在第的硬幣的時(shí)候,這一位玩家能拿到的最高價(jià)值。 LintCode Coins in a line II 有 n 個(gè)不同價(jià)值的硬幣排成一條線。兩個(gè)參賽者輪流從左邊依次拿走 1 或 2 個(gè)硬幣,直...

    2shou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<