leetcode-兩數相加
阿新 • • 發佈:2020-07-15
我的解法:
/**
* @Description TODO
* @Param [l1, l2]
* @return arrays.addTwoNumbers.ListNode
* @date 2020/7/14 17:21
* @author huanl
*
* 思路:先把他全部拿出來,拿出來的時候用字串的append函式連線起來,後面再用reverse去反轉.在把他們相加的到的
* 數轉換為StringBuilder型別,然後反轉,然後在把他變成ListNode型別.
*
* 問題: 為什麼要全部拿出來? 我們正常時候做加法,不就是從低位做起,然後有進位就記錄一下,下一次新增上.現在連結串列他給我們就是已經弄好了的低位,
* 直接從低位開始相加就好了.
* 直接一個一個取然後加的話怎麼判斷他本身到底有沒有值? 噢,直接判斷這個節點是不是為null
* 加到最後可能最後一次的進位記錄為一,怎麼處理? 再在後面多加一個節點,將這個一記錄上去.
*/
public ListNode addTwoNumber(ListNode l1, ListNode l2) {
//用StringBuilder取出l1和l2裡面所有的
StringBuilder num1 = new StringBuilder();
StringBuilder num2 = new StringBuilder();
num1.append(l1.val);
num2.append(l2.val);
while (l1.next != null) {
num1.append(l1.next.val);
l1 = l1.next;
}
while (l2.next != null) {
num2.append(l2.next.val);
l2 = l2.next;
}
//反轉為正常的順序
num1 = num1.reverse();
num2 = num2.reverse();
//將兩個字串相加 (因為直接一次的話會超出int或者long的長度) 其實最好就是將他們逆轉過來,這樣才符合我們日常的加法
int[] nums = new int[(Math.max(num1.length(), num2.length())) + 1];
for (int i = 1; i <= (Math.max(num1.length(), num2.length())); i++) {
if (i>num1.length()){
nums[nums.length-i] = Integer.parseInt(String.valueOf(num2.charAt(num2.length()-i)));
}else if(i>num2.length()){
nums[nums.length-i] = Integer.parseInt(String.valueOf(num1.charAt(num1.length()-i)));
}else {
nums[nums.length-i] = Integer.parseInt(String.valueOf(num1.charAt(num1.length()-i))) + Integer.parseInt(String.valueOf(num2.charAt(num2.length()-i)));
}
}
//處理進位資訊
for (int i = nums.length - 1; i > 0; i--) {
nums[