第一题:
//思路1.就不说了 时间复杂度 N^2
//思路2.空间换时间 改题目没有限制空间 则 最优选 时间复杂度 N
class Solution {
public int[] twoSum(int[] nums, int target) {
//用于存放 对比值
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
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;
}
}