LeetCode 494. Target Sum

10-9 LeetCode 494. Target Sum

Target Sum

Description

You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.

Find out how many ways to assign symbols to make sum of integers equal to target S.

給你一個列表和一個目標整數(shù) S,列表元素都是非負整數(shù)台夺,你有+-兩個符號,對列表里的每一個整數(shù),你需要選擇其中一個符號作為他的符號。

找出一共有多少種方法來分配符號是列表元素的和等于目標整數(shù)S

Example 1:

Input: nums is [1, 1, 1, 1, 1], S is 3.

Output: 5
Explanation:

-1+1+1+1+1 = 3

+1-1+1+1+1 = 3

+1+1-1+1+1 = 3

+1+1+1-1+1 = 3

+1+1+1+1-1 = 3

There are 5 ways to assign symbols to make the sum of nums be target 3.

Note:

  1. The lengThe length of the given array is positive and will not exceed 20.

  2. The sum of elements in the given array will not exceed 1000.

  3. Your output answer is guaranteed to be fitted in a 32-bit integer.

Solution 1():

幾乎所有題目都可以使用蠻力法窘奏,我用遞歸和循環(huán)兩種方式去使用蠻力法,結(jié)果都沒有解決葫录,都超時了着裹。。米同。骇扇。。

超時代碼如下:

`class Solution(object):

def findTargetSumWays(self, nums, S):
    """
    :type nums: List[int]
    :type S: int
    :rtype: int
    """
    if not nums:
        return 0
    front = [nums[0], -nums[0]]
    for i in range(len(nums))[1:]:
        length = len(front)
        for j in range(length):
            front.append(front[j]-nums[i])
            front[j] = front[j] + nums[i]
    count = 0
    for num in front:
        if num == S:
            count += 1
    return count`

然后就想著如何優(yōu)化這種方法窍霞,于是用字典這種數(shù)據(jù)結(jié)構(gòu)代替列表匠题,這樣就可以在循環(huán)的過程中直接求出方法數(shù),省去最后一個for sum in front循環(huán)但金,畢竟這個數(shù)據(jù)非常大韭山。

改進代碼如下:

`class Solution(object):

def findTargetSumWays(self, nums, S):
    """
    :type nums: List[int]
    :type S: int
    :rtype: int
    """
    if not nums:
        return 0
    dic = {nums[0]: 1, -nums[0]: 1} if nums[0] != 0 else {0 : 2}
    for i in range(1, len(nums)):
        temp_dic = {}
        for d in dic:
            temp_dic[d + nums[i]] = temp_dic.get(d + nums[i], 0) + dic.get(d, 0)
            temp_dic[d - nums[i]] = temp_dic.get(d - nums[i], 0) + dic.get(d, 0)
        dic = temp_dic
    return dic.get(S, 0)`

Solution 2

這是參考了大神的做法。

Java (15 ms) C++ (3 ms) O(ns) iterative DP solution using subset sum with explanation

先根據(jù)數(shù)學的關(guān)系冷溃,將問題優(yōu)化钱磅。

集合P包括所有符號為正的整數(shù),集合N包括所有符號為負的整數(shù)似枕「堑可以得出如下關(guān)系:

sum(P) - sum(N) = target

sum(P) + sum(N) + sum(P) - sum(N) = target + sum(P) + sum(N)

2*sum(P) = target + sum(nums)

于是這題目就變成求有多少中子集合的和為 (target + sum(nums))/2。 具體過程參考鏈接凿歼。

感想

這是第一次寫褪迟,寫的不是很好。主要是時間緊答憔,對問題沒有那么多時間分析味赃,也是一個摸索的階段,在摸索如何寫的精簡和易懂虐拓,畢竟大家都很忙心俗。謝謝閱讀!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蓉驹,一起剝皮案震驚了整個濱河市城榛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌态兴,老刑警劉巖狠持,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瞻润,居然都是意外死亡喘垂,警方通過查閱死者的電腦和手機献汗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來王污,“玉大人,你說我怎么就攤上這事楚午≌哑耄” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵矾柜,是天一觀的道長阱驾。 經(jīng)常有香客問我,道長怪蔑,這世上最難降的妖魔是什么里覆? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮缆瓣,結(jié)果婚禮上喧枷,老公的妹妹穿的比我還像新娘。我一直安慰自己弓坞,他們只是感情好隧甚,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渡冻,像睡著了一般戚扳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上族吻,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天帽借,我揣著相機與錄音,去河邊找鬼超歌。 笑死砍艾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的握础。 我是一名探鬼主播辐董,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼禀综!你這毒婦竟也來了简烘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤定枷,失蹤者是張志新(化名)和其女友劉穎孤澎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欠窒,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡覆旭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年退子,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片型将。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡寂祥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出七兜,到底是詐尸還是另有隱情丸凭,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布腕铸,位于F島的核電站惜犀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狠裹。R本人自食惡果不足惜虽界,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涛菠。 院中可真熱鬧莉御,春花似錦、人聲如沸碗暗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽言疗。三九已至晴圾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間噪奄,已是汗流浹背死姚。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留勤篮,地道東北人都毒。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像碰缔,于是被迫代替她去往敵國和親账劲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344