力扣537详解:字符串处理与复数乘法的完美结合

一、问题理解
复数乘法是数学中的基本运算,题目要求我们处理字符串形式的复数,并返回它们的乘积。
二、解题步骤详解
字符串解析:
使用find方法定位'+'和'i'的位置
使用substr提取实部和虚部字符串
使用stoi将字符串转换为整数
复数乘法运算:
实部 = (ac - bd)
虚部 = (ad + bc)
结果构造:
使用to_string将数值转换为字符串
按照"实部+虚部i"的格式拼接结果
三、关键点分析
字符串处理技巧:
定位关键字符的位置
安全地提取子字符串
字符串到整数的转换
复数运算规则:
理解i²=-1的性质
掌握复数乘法的展开公式
边界情况考虑:
负数的处理
输入格式的严格性
四、代码实现
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};
}
};五、优化建议
可以添加输入验证确保字符串格式正确
考虑使用stringstream替代find/substr组合
对于大量运算,可以预先解析所有复数
原创内容 转载请注明出处
