第一题:
//思路1.就不说了 时间复杂度 N^2//思路2.空间换时间 改题目没有限制空间 则 最优选 时间复杂度 Nclass Solution { public int[] twoSum(int[] nums, int target) { //用于存放 对比值 Map map = new HashMap (); int[] result = new int[2]; //遍历数组 for (int i = 0; i < nums.length; i++) { //若本次遍历的值在 hashMap中存在一个 与之和与 target 相等的数则直接 return if (map.containsKey(target - nums[i])) { result[0] = map.get(target - nums[i]); result[1] = i; // 此时 i 对应的元素还没有放进去。 return result; } //若不存在 则 直接存入 等待下一次的比对 map.put(nums[i], i); } return result; }}
第二题:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { //递归思路 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { return addTwoNumbers(l1, l2, null); } public ListNode addTwoNumbers(ListNode l1, ListNode l2, ListNode prev) { ListNode next1 = null; ListNode next2 = null; int val1 = 0; int val2 = 0; if (l1 != null) { val1 = l1.val; next1 = l1.next; } if (l2 != null) { val2 = l2.val; next2 = l2.next; } ListNode newNode = new ListNode(val1 + val2); if (prev != null) { if (prev.val >= 10) { prev.val %= 10; newNode.val += 1; } } if (next1 != null || next2 != null) { newNode.next = addTwoNumbers(next1, next2, newNode); } else if (newNode.val >= 10) { newNode.next = addTwoNumbers(next1, next2, newNode); } return newNode; }}