当前位置:首页 > 力扣 > LeetCode 537题解:复数乘法的C++高效实现与代码解析

LeetCode 537题解:复数乘法的C++高效实现与代码解析

6个月前 (06-28)

LeetCode 537题解:复数乘法的C++高效实现与代码解析  C++实现 字符串 数学公式 第1张

一、题目解读

LeetCode 537题要求实现两个复数的乘法,输入为形如"a+bi"的字符串,需输出乘积的复数形式。题目核心在于解析字符串中的实部与虚部,并应用复数乘法公式计算结果。

二、解题思路

采用分治思想:首先通过自定义parseComplex函数解析两个复数的实部与虚部,再利用复数乘法公式(a+bi)(c+di)=(ac-bd)+(ad+bc)i计算实部与虚部,最后拼接结果字符串。关键在于利用字符串操作定位"+"和"i"的位置,提取数值并转换。

三、解题步骤

1. 解析输入:调用parseComplex两次,分别获取num1和num2的实部(a/c)与虚部(b/d)。

2. 计算乘积:按公式计算real=(ac-bd),imag=(ad+bc)。

3. 构造输出:将real与imag转换为字符串,拼接为"real+imagi"格式。

四、代码与注释

class Solution {  
public:  
    string complexNumberMultiply(string num1, string num2) {  
        // 解析第一个复数的实部和虚部  
        auto [a, b] = parseComplex(num1);  
        // 解析第二个复数的实部和虚部  
        auto [c, d] = parseComplex(num2);  
        
        // 计算实部和虚部  
        int real = a * c - b * d;  
        int imag = a * d + b * c;  
        
        // 构造结果字符串  
        return to_string(real) + "+" + to_string(imag) + "i";  
    }  
    // 辅助函数:解析复数字符串  
    pair<int, int> parseComplex(const string& num) {  
        // 找到'+'和'i'的位置  
        size_t plus_pos = num.find('+');  
        size_t i_pos = num.find('i');  
        
        // 提取实部和虚部  
        int real = stoi(num.substr(0, plus_pos));  
        int imag = stoi(num.substr(plus_pos + 1, i_pos - plus_pos - 1));  
        
        return {real, imag};  
    }  
};

注释说明:

● parseComplex通过find定位符号位置,利用substr截取数值并转换,减少手动遍历开销。

● 主函数直接应用公式,避免中间变量冗余。

五、总结

该解法通过精准的字符串解析与公式直接计算,兼具简洁性与效率。核心技巧在于利用C++的find与substr快速定位数值,避免复杂分割逻辑。适合处理中等长度复数乘法问题,时间复杂度O(N)(N为字符串长度)。

原创内容 转载请注明出处

分享给朋友:

相关文章

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化

题目重解需要将密码字符串从第target个字符开始进行重新排列,形成新的动态密码。例如输入"password"和target=3,结果应为"swordpas"。...

力扣第71题:用栈轻松解决Unix路径简化问题

力扣第71题:用栈轻松解决Unix路径简化问题

题目解读:在Unix风格的文件系统中,我们经常需要处理各种复杂的路径表示。给定一个绝对路径字符串,我们需要将其转换为最简化的规范路径。规范路径要求:路径始终以斜杠'/'开头;两个目录名...

手搓邻接表类代码注释与详解:从零开始理解图数据结构(适合新手小白)

一、简介和特点邻接表是一种用于存储图(Graph)的数据结构,特别适合稀疏图(边数较少的图)。它通过链表的方式为每个节点维护其相邻节点的信息,既能高效节省空间,又能灵活支持图的动态操作。本文将基于您手...

手搓顺序表实现栈 代码详解及新手教程——从原理到实现的完整指南

一、简介和特点顺序栈是一种基于数组实现的后进先出(LIFO)数据结构。通过动态数组管理存储空间,它具备以下特点:1. 数组存储:数据连续存储,支持随机访问,访问效率高。2. 动态扩容:当栈满时自动扩展...

牛客13278题详解:句子单词反转(C++实现)

牛客13278题详解:句子单词反转(C++实现)

一、题目解读牛客13278题要求编写函数实现句子中单词顺序的反转,例如将"Hello World"转换为"World Hello"。需注意处理首尾空格、单词间空...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。