题目见:https://leetcode.com/problemset/all/
题目一:3Sum Closest
这是xSum类型题。与之前一样,遍历数组组合数据为给定值。本题要求和最接近与某一个数,同样先确定一个已知数,再寻找另外两个,同样的,对数组排序是最优的预处理。接下来,最接近即差值的绝对值最小。
代码参考:http://www.cnblogs.com/grandyang/p/4510984.html
代码:
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int res = nums[0] + nums[1] + nums[2];
int diff = Math.abs(res - target);
for(int i=0;i<nums.length-2;i++){
int m = i+1, n = nums.length-1;
while(m < n){
int sum = nums[i] + nums[m] + nums[n];
int newDiff = Math.abs(sum-target);
if(newDiff == 0)
return sum;
if(diff > newDiff){
diff = newDiff;
res = sum;
}
if(sum < target)
m++;
else
n--;
}
}
return res;
}
}
题目二:Add Two Numbers
java链表题,不熟悉。但是链表题就是要注意链表头的保存,指针域的非空判断,节点更新。本题中,主要注意进位问题
参考代码:http://www.cnblogs.com/grandyang/p/4129891.html
代码:
/**
* 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) {
ListNode dummy = new ListNode(-1);
ListNode cur = dummy;
int carry = 0;
while(l1 != null || l2 != null){
int d1 = l1 == null ? 0 : l1.val;
int d2 = l2 == null ? 0 : l2.val;
int sum = d1 + d2 + carry;
carry = sum >= 10 ? 1 : 0;
cur.next = new ListNode(sum % 10);
cur = cur.next;
if(l1 != null)
l1 = l1.next;
if(l2 != null)
l2 = l2.next;
}
if(carry == 1)
cur.next = new ListNode(1);
return dummy.next;
}
}