力扣---2020.9.8
作者:互联网
77. 组合
class Solution {
List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
backtrack(n,k,new ArrayList<>(),1);
return list;
}
public void backtrack(int n,int k,List<Integer> track,int start){
if(track.size()==k){
list.add(new ArrayList(track));
return;
}
for(int i = start;i <= n;i++){
track.add(i);
backtrack(n,k,track,i+1);
track.remove(track.size()-1);
}
}
}
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
for(int i = 0;i<k;i++){
temp.add(0);
}
int i = 0;
while (i >= 0) {
temp.set(i, temp.get(i)+ 1); //当前数字加 1
//当前数字大于 n,对应回溯法的 i == n + 1,然后回到上一层
if (temp.get(i) > n) {
i--;
// 当前数字个数够了
} else if (i == k - 1) {
ans.add(new ArrayList<>(temp));
//进入更新下一个数字
}else {
i++;
//把下一个数字置为上一个数字,类似于回溯法中的 start
temp.set(i, temp.get(i-1));
}
}
return ans;
}
}
22. 括号生成
class Solution {
List<String> res = new ArrayList<>();
public List<String> generateParenthesis(int n) {
dfs(n,n,"");
return res;
}
public void dfs(int left,int right,String str){
if(left==0&&right==0){
res.add(str);
return;
}
if (left > 0){
dfs(left-1,right,str+"(");
}
if(right > left){
dfs(left,right-1,str+")");
}
}
}
// 还没看懂代码和思路....
class Solution {
ArrayList[] cache = new ArrayList[100];
public List<String> generate(int n) {
if (cache[n] != null) {
return cache[n];
}
ArrayList<String> ans = new ArrayList();
if (n == 0) {
ans.add("");
} else {
for (int c = 0; c < n; ++c)
for (String left: generate(c))
for (String right: generate(n - 1 - c))
ans.add("(" + left + ")" + right);
}
cache[n] = ans;
return ans;
}
public List<String> generateParenthesis(int n) {
return generate(n);
}
}
2. 两数相加
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
int carry = 0;
while(l1 != null || l2 != null || carry != 0){
int sum = 0;
sum += l1==null ? 0:l1.val;
sum += l2==null ? 0:l2.val;
sum = sum + carry;
carry = sum / 10;
curr.next = new ListNode(sum%10);
curr = curr.next;
if(l1 != null){
l1 = l1.next;
}
if(l2 != null){
l2 = l2.next;
}
}
return dummy.next;
}
}
你知道的越多,你不知道的越多。
标签:---,return,2020.9,int,ArrayList,List,力扣,ans,new 来源: https://blog.csdn.net/qq_40722827/article/details/108476905