摘要:再在前一種情況下繼續(xù)下一輪的遍歷,并將結(jié)果添加到隊(duì)列末尾。思路二遞歸其實(shí),通過(guò)遞歸的方法我們也可以在前一輪的基礎(chǔ)上進(jìn)行下一輪的計(jì)算。
題目要求
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For example, If n = 4 and k = 2, a solution is: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
有整數(shù)從1到n,問(wèn)從中任選兩個(gè)數(shù)有多少排列組合的結(jié)果(順序無(wú)關(guān))
思路一:利用鏈表(超時(shí)問(wèn)題)這題其實(shí)是動(dòng)態(tài)編碼的一個(gè)題目,可以通過(guò)鏈表實(shí)現(xiàn)隊(duì)列存儲(chǔ)前一種情況。再在前一種情況下繼續(xù)下一輪的遍歷,并將結(jié)果添加到隊(duì)列末尾。代碼如下:
public List> combine(int n, int k) { List
> result = new LinkedList
>(); if(k==0){ return result; } for(int i = 0 ; i+k<=n ; i++){ result.add(Arrays.asList(i+1)); } while(result.get(0).size() != k){ List
currentList = result.remove(0); for(int i = currentList.get(currentList.size()-1) + 1 ; i<=n ; i++){ List temp = new ArrayList (currentList); temp.add(i); result.add(temp); } } return result; }
但是在這里存在超時(shí)問(wèn)題,歸根結(jié)底在于每一次都要?jiǎng)?chuàng)建新的數(shù)組用來(lái)保存臨時(shí)結(jié)果,既占用內(nèi)存又影響效率。
思路二:遞歸其實(shí),通過(guò)遞歸的方法我們也可以在前一輪的基礎(chǔ)上進(jìn)行下一輪的計(jì)算。遞歸代碼如下:
public List> combine2(int n, int k){ List
> result = new ArrayList
>(); if(k==0) return result; combine2(result, new ArrayList
(), 1, n, k); return result; } public void combine2(List > currentResult, List
list, int start, int n, int k){ if(k==0){ currentResult.add(new ArrayList (list)); return; } while(start+k-1<=n){ list.add(start++); combine2(currentResult, list, start, n, k-1); list.remove(list.size()-1); } }
想要了解更多開(kāi)發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67304.html
找出string里的單詞。 186. Reverse Words in a String II, 434. Number of Segments in a String combination類型題 77. Combinations 39. Combination Sum 40. Combination Sum II 216. Combination Sum III 494. Target S...
摘要:題目描述題目理解將一段字符廣度搜索截取,分別有種組合形式,添加限制條件,過(guò)濾掉不適合的組合元素。長(zhǎng)度,大小,首字母應(yīng)用如果進(jìn)行字符串的子元素組合窮舉,可以應(yīng)用。所有的循環(huán),利用到前一個(gè)狀態(tài),都可以理解為動(dòng)態(tài)規(guī)劃的一種分支 題目描述:Given a string containing only digits, restore it by returning all possible va...
摘要:題目要求類似的題目有可以參考這篇博客可以參考這篇博客思路一遞歸還是利用遞歸的方式,在前一種情況的基礎(chǔ)上遍歷下一輪的組合情況。 題目要求 Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not contain duplicate subset...
摘要:本題與類似,都是用回溯法。求中個(gè)數(shù)的不同組合,很明顯我們需要注意的就是每個(gè)數(shù)字只能出現(xiàn)一次,這點(diǎn)與不同。 CombinationsGiven two integers n and k, return all possible combinations of k numbers out of 1 ... n. For example, If n = 4 and k = 2, a solu...
摘要:最新更新請(qǐng)見(jiàn)深度優(yōu)先搜索復(fù)雜度時(shí)間空間遞歸??臻g思路首先建一個(gè)表,來(lái)映射號(hào)碼和字母的關(guān)系。然后對(duì)號(hào)碼進(jìn)行深度優(yōu)先搜索,對(duì)于每一位,從表中找出數(shù)字對(duì)應(yīng)的字母,這些字母就是本輪搜索的幾種可能。 Letter Combinations of a Phone Number 最新更新請(qǐng)見(jiàn):https://yanjia.me/zh/2019/01/... Given a digit string...
閱讀 2813·2021-10-14 09:42
閱讀 3619·2021-10-11 10:59
閱讀 2953·2019-08-30 11:25
閱讀 3088·2019-08-29 16:25
閱讀 3234·2019-08-26 17:40
閱讀 1241·2019-08-26 13:30
閱讀 1155·2019-08-26 11:46
閱讀 1337·2019-08-23 15:22