- List<List<Integer>> list :
1.List 不能被实例化,即不能等于new List。。。。
2.可以被实例化成ArrayList(注意AL大写)。
3.同样内部的List<Integer> 也要被实例成ArrayList<Integer>()
4.list.add(listTemp);之后 如果listTemp被改变了, list里的listTemp部分也被改变。因为List是引用类型, 将对象传入List的时候要new一个新的对象再添加。如:list.add(new ArrayList<Integer>(listTemp)); 值类型和引用类型的区别 - 全排列问题解决思路:需要一个visited数组来标记某个数字是否被使用过,需要一个steps来判断当前排到第几位来,需要一个ans list来存储所有排列,需要一个possibleAns 来存储一种可能的情况,在可能的情况的长度等于nums的长度是就把它加到ans list里。在每个数字被加入到possibleAns里之后 对应的visited应该置1,然后step+1,递归调用进行下一个位置的排数,返回之后将对应数的visited置0;
class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> ans = new ArrayList<List<Integer>>(); List<Integer> possibleAns = new ArrayList<Integer>(); int steps = 0; int[] visited = new int[nums.length]; recursiveSolution(nums, steps, ans, possibleAns, visited); return ans; } public void recursiveSolution(int[] nums, int steps, List<List<Integer>> ans, List<Integer> possibleAns, int[] visited){ if(steps == nums.length){ ans.add(new ArrayList<>(possibleAns)); return; }else{ for(int i = 0; i < nums.length; i++){ if(visited[i] == 1) continue; visited[i] = 1; possibleAns.add(nums[i]); recursiveSolution(nums, steps + 1, ans, possibleAns, visited); visited[i] = 0; possibleAns.remove(possibleAns.size() - 1); } } } }
- 合并两个有序链表问题:定义一个新的header,这里称为ans,和一个一直向后移动的node,起始和ans相等这里是temp。 当l1或l2中的一个值被加入到ans相应的l1和l2也要后移一位。所以,循环的判断条件是 l1 != null||l2 != null。直到遇到了,某个链表为空的情况,就把另一个链表剩下的部分直接插入到ans里,break。在比较出两个点的大小时,将小的点插入到ans里,且temp等于当前插入的点,当前点后移。
// /** // * Definition for singly-linked list. // * public class ListNode { // * int val; // * ListNode next; // * ListNode() {} // * ListNode(int val) { this.val = val; } // * ListNode(int val, ListNode next) { this.val = val; this.next = next; } // * } // */ class Solution { ListNode ans = new ListNode(0); ListNode temp = ans; public ListNode mergeTwoLists(ListNode l1, ListNode l2) { while(l1 != null || l2 != null){ if(l1 == null){ temp.next = l2; break; } else if(l2 == null) { temp.next = l1; break; } else{ if(l1.val > l2.val){ temp.next = l2; temp = l2; l2 = l2.next; }else{ temp.next = l1; temp = temp.next; l1 = l1.next; } } } return ans.next; } }
小白算法刷题Day2
最新推荐文章于 2024-09-12 19:02:20 发布