算法-字符串-43.字符串相乘

一、题目

二、思路解析

1.思路:

1.双重for循环,倒序依次相乘

2.在倒序处理进位问题

3.最后返回参数的类型是string,用StringBuilder拼接,再转换为字符串

2.常用方法:

1.equals,比较对象内容是否一致

java 复制代码
"0".equals(num1);

2.append(),拼接字符

java 复制代码
sb.append(res[index]);

3.toString(),转字符串

java 复制代码
sb.toString();

3.核心逻辑:

1.处理特殊情况,当两个字符串有其中一个为"0",即返回结果值为"0"

java 复制代码
if("0".equals(num1)||"0".equals(num2)) return "0";

2.定义一个整型数组res来存储每一个位数于位数的乘积值,无需关注是否进位问题

java 复制代码
int[]res=new int[num1.length()+num2.length()];

for(int i=num1.length()-1;i>=0;i--){
    int temp1=num1.charAt(i)-'0';

    for(int j=num2.length()-1;j>=0;j--){
     int temp2=num2.charAt(j)-'0';
     res[i+j+1]+=temp1+temp2;
}
}
  1. 处理进位问题
java 复制代码
for(int i=res.length-1;i>0;i--){
    res[i-1]+=res/10;
    res[i]=res[i]%10;
}

4.拼接字符串

√.注意事项:两数相乘,最后的结果位数范围是不超过两数位数相加,同时也不会小于 两数位数相加-1;故需要判断首字符是否为0,才好决定从哪一位开始拼接

java 复制代码
int index=res[0]==0?1:0;
        StringBuilder sb=new StringBuilder();
        for(int i=index;i<res.length;i++){
            sb.append(res[i]);
        }
        return sb.toString();

三、代码实现

java 复制代码
class Solution {
    public String multiply(String num1, String num2) {
        if("0".equals(num1)||"0".equals(num2)){
            return "0";
        }

        int size1=num1.length();
        int size2=num2.length();
        int[]res=new int[size1+size2];

        for(int i=size1-1;i>=0;i--){
            int t1=num1.charAt(i)-'0';
            for(int j=size2-1;j>=0;j--){
                int t2=num2.charAt(j)-'0';
                res[i+j+1]+=t1*t2;
            }
        }
        for(int i=res.length-1;i>0;i--){
            res[i-1]+=res[i]/10;
            res[i]=res[i]%10;
        }
        int start=res[0]==0?1:0;
        StringBuilder sb=new StringBuilder();
        for(int i=start;i<res.length;i++){
            sb.append(res[i]);
        }
        return sb.toString();
    }
}
相关推荐
在努力的前端小白2 小时前
Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
java·数据库·spring boot·文本处理·敏感词过滤·dfa算法·组件开发
麦兜*3 小时前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
Coovally AI模型快速验证4 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun4 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
萧鼎5 小时前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python
一叶飘零_sweeeet5 小时前
从繁琐到优雅:Java Lambda 表达式全解析与实战指南
java·lambda·java8
RaymondZhao345 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
艾伦~耶格尔5 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
zhangfeng11335 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
yujkss5 小时前
Python脚本每天爬取微博热搜-终版
开发语言·python