LeetCode2. 两数相加

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

//        一.遍历链表,用StringBuilder存储字符串,因为可以直接调用reverse()*/
        StringBuilder sb = new StringBuilder();
        while (l1.next != null) {
            sb.append(l1.val);
            l1 = l1.next;
        }
        sb.append(l1.val);/*遍历链表1,用StringBuilder存储字符串*/
        String s1 = sb.reverse().toString();/*反转字符串*/
        StringBuilder sb2 = new StringBuilder();
        while (l2.next != null) {
            sb2.append(l2.val);
            l2 = l2.next;
        }
        sb2.append(l2.val);
        String s2 = sb2.reverse().toString();/*与上同*/
        /* ------------分割线-----------------*/

//        二.调用自己写的add方法
        String add = add(s1, s2);/*调用add()方法模拟十进制加法运算*/

        /* ------------分割线-----------------*/

//       三. 遍历相加后的字符串,从后向前遍历,存入链表数组中
        ListNode n = new ListNode(add.charAt(add.length() - 1) - '0');
        ListNode cur = n;
        for (int i = add.length() - 2; i >= 0; i--) {
            cur.next = new ListNode(add.charAt(i) - '0');
            cur = cur.next;
        }
        return n;

    }
//       四。自己写的模拟加法过程
    public static String add(String s, String t) {
        String ss = "";
        if (s.length() >= t.length()) {/*因为不知道长度是哪个大,所以分情况*/
            while (t.length() < s.length()) {
                t = '0' + t;/*谁长度小,就在前面补0,最后长度两者一致*/
            }
        } else {
            while (t.length() > s.length()) {
                s = '0' + s;/*与上同*/
            }
        }
        /* ------------分割线-----------------*/

        int index = 0;/*作为是否进1位的标准*/
        for (int i = s.length() - 1; i >= 0; i--) {/*从后向前遍历,因为两字符串长度相同,所以随意*/
            int a = (s.charAt(i) - '0' + t.charAt(i) - '0');/*两字符串的相同位置的字符相加,注意ASCII编码*/
            ss = ((a + index) % 10) + ss;/*取余,添加到字符左边*/
            if (a + index >= 10) {/*如果相加大于等于10,表示要进1,因此index=1*/
                index = 1;
            } else {/*否则index=0,表示不进1*/
                index = 0;
            }
        }
        if (index == 1) {/*特别注意,当字符串第一位为9,且刚好还要进1,则需要在前面加上一位数字1 */
            ss = '1' + ss;
        }
        return ss;
    }

 

posted @ 2022-05-05 17:28  学习没什么用  阅读(35)  评论(0)    收藏  举报