Go最新LeetCode 415(1),2024年最新关于Flutter文本组件Widget的全面解读

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

在纸上对两个整数相加的操作:将相同数位对齐,从低到高逐位相加,如果当前位和超过 10,则向高位进一位

因此只要将这个过程用代码写出来即可

class Solution {
    public String addStrings(String num1, String num2) {
        // 双指针分别指向末尾,即最低位,add代表进位
        int i = num1.length() - 1, j = num2.length() - 1, add = 0;
        StringBuffer ans = new StringBuffer();
        while (i >= 0 || j >= 0 || add != 0) {
            // 对位数较短的数字进行补零操作
            int x = i >= 0 ? num1.charAt(i) - '0' : 0;
            int y = j >= 0 ? num2.charAt(j) - '0' : 0;
            int result = x + y + add;
            ans.append(result % 10);
            add = result / 10;
            i--;
            j--;
        }
        // 计算完以后的答案需要翻转过来
        ans.reverse();
        return ans.toString();
    }
}

  • 时间复杂度:

O

(

max

(

len

1

,

len

2

)

)

O(\max(\textit{len}_1,\textit{len}_2))

O(max(len1​,len2​)),其中

len

1

=

num

1

.

length

\textit{len}_1=\textit{num}_1.\text{length}

len1​=num1​.length,

len

2

=

num

2

.

length

\textit{len}_2=\textit{num}_2.\text{length}

len2​=num2​.length。竖式加法的次数取决于较大数的位数。

  • 空间复杂度:

O

(

n

)

O(n)

O(n)。在 Java 解法中使用到了 StringBuffer,故 Java 解法的空间复杂度为

O

(

n

)

O(n)

O(n)。

补充:字符串相加(36进制)

题目

在这里插入图片描述

模拟

掌握十进制的大数相加后,那本题只需要注意将10变成36,以及36进制字符与数值的转换。

使用了getChar(int n)getInt(char ch)两个辅助函数来完成36进制字符与数值的转换

// 数值 -> 36进制字符
public char getChar(int n) {
    if (n <= 9) {
        return (char)(n + '0');
    } else {
        return (char)(n - 10 + 'a');
    }
}
// 36进制字符 -> 数值
public int getInt(char ch) {
    if ('0' <= ch && ch <= '9') {
        return ch-'0';
    } else {
        return ch-'a'+10;
    }
}
public String add36Strings(String num1, String num2) {
    char[] chars1 = num1.toCharArray();
    char[] chars2 = num2.toCharArray();
    // 双指针分别指向末尾,即最低位
    int i = chars1.length - 1;
    int j = chars2.length - 1;
    // 进位
    int carry = 0;
    StringBuilder sb = new StringBuilder();
    while (i >= 0 || j >= 0 || carry != 0) {
        // 对位数较短的数字进行补零操作
        int x = i >= 0 ? getInt(chars1[i]) : 0;
        int y = j >= 0 ? getInt(chars2[j]) : 0;
        int sum = x + y + carry;
        sb.append(getChar(sum % 36));
        carry = sum / 36;
        i--;
        j--;
    }
    // 计算完以后的答案需要翻转过来
    sb.reverse();
    return sb.toString();
}

补充:字符串相减(10进制)

题目

在这里插入图片描述

模拟

两个非负整数相减的结果可能为负。

因此,首先比较两个数的大小。由于是大数,肯定不能直接转成int比较。可以比较两个字符串的长度。长度更长的字符串,数一定更大;当长度一样的就去比较字典序。

当小减大时,需将两个参数调换一下位置执行减法,在结果前填上负号即可注意:结果为0时不加负号。

public class SubString {
    /\*\*
 \* 若a字符串表示的数字小于b字符串表示的数字则返回true
 \*
 \* @param a
 \* @param b
 \* @return
 \*/
    public static boolean isLess(String a, String b) {
        // 由于是大数,考虑转成字符串处理
        // 长度更长的字符串,数一定更大
        // 当长度一样的就去比较字典序
        if (a.length() == b.length()) {
            if (a.compareTo(b) < 0) {
                return true;
            } else if (a.compareTo(b) >= 0) {
                return false;
            }
        }
        return a.length() < b.length();
    }

    /\*\*
 \* 大数减小数
 \* @param a
 \* @param b
 \* @return
 \*/
    public static String sub(String a, String b) {
        StringBuilder ans = new StringBuilder();
        int borrow = 0;


![img](https://img-blog.csdnimg.cn/img_convert/417b9294be0b7b531f9c7bd2069c7873.png)
![img](https://img-blog.csdnimg.cn/img_convert/6ab9fd492f1615f9dc2a51ae40bc7ee1.png)
![img](https://img-blog.csdnimg.cn/img_convert/0d982748d403048da752225359dd3f3b.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

转存中...(img-dFNwaoqj-1715884361251)]
[外链图片转存中...(img-lhsY75kl-1715884361252)]
[外链图片转存中...(img-Vp5Cmc6b-1715884361252)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值