标题中提到的4道题目都较为简单,合并到一起写解题记录。
66 Plus One
概述
Plus One 即给定以数组形式表示各位的数字,将这一数字加1的结果输出为数组即可。
分析
这一题主要处理的是常规的运算的进位问题,同时,由于数组并没有确定数字为int,那么位数不定,需要按照正常的竖式运算的步骤进行。
当计算发现最高位需要进位时,申请更大的空间,返回结果。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class Solution { public int[] plusOne(int[] digits) { int[] r = new int[digits.length]; int now = 1;
for (int i = digits.length - 1; i >= 0; --i) { r[i] = (now + digits[i]) % 10; now = (now + digits[i]) / 10; }
if (now > 0) { int[] result = new int[digits.length + 1];
for (int i = digits.length; i >= 1; --i) { result[i] = r[i - 1]; }
result[0] = now;
return result; }
return r; } }
|
67 Add Binary
概述
Add Binary 与 66
Plus One 很相似,只不过由十进制数变为了二进制数的加法。
输入是字符串,输出也是字符串。
分析
二进制加法,仍然按照竖式计算的方式进行即可。无需多说。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public class Solution { public String addBinary(String a, String b) { int now = 0; String result = ""; int ai = a.length() - 1; int bi = b.length() - 1;
for (; ai >= 0 || bi >= 0; --ai, --bi) { int val = 0;
if (ai >= 0 && bi >= 0) { char ac = a.charAt(ai); char bc = b.charAt(bi);
val = now + (ac - '0') + (bc - '0'); } else if (ai >= 0) { char ac = a.charAt(ai); val = now + (ac - '0'); } else { char bc = b.charAt(bi); val = now + (bc - '0'); }
result = val % 2 + result; now = val / 2; }
if (now > 0) { result = 1 + result; }
return result; } }
|
83 Remove Duplicates from Sorted List
概述
Remove Duplicates from Sorted List 即在已排序的单向链表中完成去重。
分析
链表已排序,去重工作变得相当容易,只需要判断当前节点的值是否等于上一节点的值,如果等于则将链表当前的下一指针指向下下一个节点,周而复始。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class Solution { public ListNode deleteDuplicates(ListNode head) { if (null == head) { return null; }
ListNode r = head; int now = 0;
while (r.next != null) { now = r.val;
if (now == r.next.val) { r.next = r.next.next; } else { r = r.next; } }
return head; } }
|
217 Contains Duplicate
概述
Contains Duplicate 判断数组中是否有重复的值。
分析
使用Hash完成这一判断最为容易,判断一个值是否在 HashMap 中存在即可。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Solution { public boolean containsDuplicate(int[] nums) { HashMap<Integer, Integer> m = new HashMap<Integer, Integer>();
for (int n : nums) { if (m.containsKey(n)) { return true; }
m.put(n, 1); }
return false; } }
|