Uber面試題 數字組合(還算簡單)

2021-10-24 05:10:27 字數 1474 閱讀 8129

給定乙個候選數字的集合 candidates 和乙個目標值 target. 找到 candidates 中所有的和為 target 的組合。

在同乙個組合中, candidates 中的某個數字不限次數地出現。

輸入: candidates = [2, 3, 6, 7], target = 7

輸出: [[7], [2, 2, 3]]

輸入: candidates = [1], target = 3

輸出: [[1, 1, 1]]

1.由於題目候選數字的集合candidates可能包含重複數字,且返回的結果要求組合內數字非降序,因此首先需對candidates進行公升序排序並去重,得到新的數字集合candidatesnew;

2.對新的數字集合進行深度優先搜尋,傳入的引數包括:數字集合candidatesnew、當前的位置index、當前存入的組合current、距離目標值的差remaintarget、儲存答案的列表result;

時間複雜度:o(n^target/min), (拷貝過程視作o(1)),n為集合中數字個數,min為集合中最小的數字

每個位置可以取集合中的任意數字,最多有target/min個數字。

空間複雜度:o(n^target /min),n為集合中數字個數,min為集合中最 小的數字

對於用來儲存答案的列表,最多有n^target/min種組合

public class solution 

// 排序和去重

int candidatesnew = removeduplicates(candidates);

// dfs

dfs(candidatesnew, 0, new arraylist(), target, results);

return results;

}private int removeduplicates(int candidates)

}int candidatesnew = new int[index + 1];

for (int i = 0; i < index + 1; i++)

return candidatesnew;

}private void dfs(int candidatesnew, int index, listcurrent, int remaintarget, list> results)

// 遞迴的拆解:挑乙個數放入current

for (int i = index; i < candidatesnew.length; i++)

current.add(candidatesnew[i]);

dfs(candidatesnew, i, current, remaintarget - candidatesnew[i], results);

current.remove(current.size() - 1);}}

}

簡單面試題

1.short s1 1 s1 s1 1 有錯嗎?short s1 1 s1 1 有錯嗎?答 對於short s1 1 s1 s1 1 由於1是int型別,因此s1 1運算結果也是int 型,需要強制轉換型別才能賦值給short型。而short s1 1 s1 1 可以正確編譯,因為s1 1 相當於...

面試題 找單獨數字

陣列a中,除了某乙個數字x之外,其他數字都出現了 三次,而x出現了 一次。請給出最快的方法,找到x。這道題是 陣列中除了乙個數字外,其他數字都出現了兩次這道題的公升級版,在其他數字都是兩個的陣列中找出單獨的數字,由於兩個相同的數字經過異或運算後為0,所以我們只要讓陣列中的每乙個數字相互異或就能找到那...

Python 數字聯盟 面試題

1.寫出輸出結果 class myclass class name xiaobai def init self,args if args self.class name args 0 def print name self print this class name format self.clas...