首页 > 其他分享 >LeetCode题练习与总结:复数乘法--537

LeetCode题练习与总结:复数乘法--537

时间:2025-01-11 23:33:48浏览次数:3  
标签:实部 虚部 num1 -- 复杂度 537 复数 字符串 LeetCode

一、题目描述

复数 可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件:

  • 实部 是一个整数,取值范围是 [-100, 100]
  • 虚部 也是一个整数,取值范围是 [-100, 100]
  • i^2 == -1

给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串。

示例 1:

输入:num1 = "1+1i", num2 = "1+1i"
输出:"0+2i"
解释:(1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。

示例 2:

输入:num1 = "1+-1i", num2 = "1+-1i"
输出:"0+-2i"
解释:(1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式。 

提示:

  • num1 和 num2 都是有效的复数表示。

二、解题思路

  1. 首先,我们需要解析两个输入字符串 num1 和 num2,提取出它们的实部和虚部。这可以通过查找 + 和 i 的位置来实现。

  2. 然后,根据复数乘法的规则,计算两个复数乘积的实部和虚部。复数乘法的规则是:(a + bi) * (c + di) = (ac - bd) + (ad + bc)i,其中 a 和 b 是第一个复数的实部和虚部,c 和 d 是第二个复数的实部和虚部。

  3. 最后,将计算得到的实部和虚部格式化为字符串,按照题目要求的格式返回。

三、具体代码

class Solution {
    public String complexNumberMultiply(String num1, String num2) {
        // 解析第一个复数的实部和虚部
        int plusIndex1 = num1.indexOf('+');
        int real1 = Integer.parseInt(num1.substring(0, plusIndex1));
        int imaginary1 = Integer.parseInt(num1.substring(plusIndex1 + 1, num1.length() - 1));
        
        // 解析第二个复数的实部和虚部
        int plusIndex2 = num2.indexOf('+');
        int real2 = Integer.parseInt(num2.substring(0, plusIndex2));
        int imaginary2 = Integer.parseInt(num2.substring(plusIndex2 + 1, num2.length() - 1));
        
        // 计算乘积的实部和虚部
        int real = real1 * real2 - imaginary1 * imaginary2;
        int imaginary = real1 * imaginary2 + real2 * imaginary1;
        
        // 格式化并返回结果
        return real + "+" + imaginary + "i";
    }
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 解析第一个复数的实部和虚部:

    • indexOf 方法的时间复杂度是 O(n),其中 n 是字符串的长度。
    • substring 方法的时间复杂度是 O(m),其中 m 是提取的子字符串的长度。
    • parseInt 方法的时间复杂度是 O(m),因为需要遍历整个子字符串。
    • 对于第一个复数,这些操作总共的时间复杂度是 O(n + m + m) = O(n + 2m)。
  • 解析第二个复数的实部和虚部:

    • 与第一个复数相同,时间复杂度也是 O(n + 2m)。
  • 计算乘积的实部和虚部:

    • 只涉及到几个基本的算术操作,时间复杂度是 O(1)。
  • 格式化并返回结果:

    • 字符串连接操作的时间复杂度是 O(n),其中 n 是最终字符串的长度。

因此,总的时间复杂度是 O(n + 2m) + O(n + 2m) + O(1) + O(n) = O(2n + 4m + n) = O(3n + 4m)。由于 n 和 m 都是输入字符串的长度,我们可以认为它们是相等的,所以时间复杂度可以简化为 O(n)。

2. 空间复杂度
  • 解析复数时使用的变量 real1imaginary1real2imaginary2 都是基本数据类型,占用常数空间,空间复杂度是 O(1)。

  • 计算乘积的实部和虚部使用的变量 real 和 imaginary 也是基本数据类型,占用常数空间,空间复杂度是 O(1)。

  • 格式化并返回结果时,创建了一个新的字符串,其长度与输入字符串的长度成线性关系,空间复杂度是 O(n)。

因此,总的空间复杂度是 O(1) + O(1) + O(n) = O(n)。由于 n 是输入字符串的长度,所以空间复杂度是 O(n)。

五、总结知识点

  • 字符串操作

    • indexOf:用于查找字符串中特定字符或子字符串的位置。
    • substring:用于提取字符串的子字符串。
    • length():用于获取字符串的长度。
  • 整数解析

    • Integer.parseInt:用于将字符串解析为整数。
  • 算术运算

    • 加法(+)、减法(-)、乘法(*):用于执行基本的算术运算。
  • 字符串连接

    • 使用 + 运算符将字符串和整数拼接起来,以构建最终的复数字符串表示。
  • Java基本数据类型

    • int:用于存储整数。
  • 算法逻辑

    • 复数乘法的数学规则:(a + bi) * (c + di) = (ac - bd) + (ad + bc)i
  • 代码结构

    • 方法定义:public String complexNumberMultiply(String num1, String num2) 定义了一个公共方法,接受两个字符串参数并返回一个字符串。
    • 变量声明和初始化:在方法内部声明并初始化所需的变量。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

标签:实部,虚部,num1,--,复杂度,537,复数,字符串,LeetCode
From: https://blog.csdn.net/weixin_62860386/article/details/145066919

相关文章

  • flask框架网上电影购票系统毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于网上电影购票系统的研究,现有研究主要集中在购票流程的优化和用户体验的提升方面。专门针对电影购票系统中各功能模块(如影院信息、......
  • docker安装eclipse-mosquito测试mqtt
    拉取镜像dockerpulleclipse-mosquitto创建目录mkdirmqttcdmqttmkdirconfigmkdirdatamkdirlog创建配置文件cdmqtt/configtouchmosquitto.conftouchpasswdvimmosquitto.conf点击查看代码listener1883persistencetruepersistence_location/mo......
  • scanf:数据之舟的摆渡人,静卧输入港湾的诗意守候
    大家好啊,我是小象٩(๑òωó๑)۶我的博客:XiaoXiangζั͡ޓއއ很高兴见到大家,希望能够和大家一起交流学习,共同进步。*这一节我们主要来学习scanf的基本用法,了解scanf返回值,懂得scanf占位符和赋值忽略符的知识,然后我们还会学习到关于Visualstudio环境下scanf不......
  • 【pcap文件】TCP重传与重叠碎片
    #pcap文件网络流量数据包捕获是网络安全领域的重要部分,而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量,我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题,及时发现异常活动,保护我们......
  • Jenkins持续集成与交付安装配置
    Jenkins是一款开源的持续集成(CI)和持续交付(CD)工具,它主要用于自动化软件的构建、测试和部署流程。为项目持续集成与交付功能强大的应用。下面我们来介绍下它的安装与配置。环境准备更新系统组件(这里以ubuntu为例)sudoaptupdatesudoaptupgrade主机安装jdk11及以上版......
  • k8s如何进行版本回滚
    在Kubernetes(k8s)中,版本回滚通常指的是将Deployment、DaemonSet或StatefulSet等资源回滚到之前的版本。Kubernetes通过记录资源的修订历史(revisionhistory)来支持回滚操作。以下是回滚操作的步骤:1.查看历史版本首先,你需要查看资源的修订历史,确定要回滚到的版本。kube......
  • websocket股票行情接口
    股票行情区别交易所出来的数据,不管通过什么渠道,延时一般都不会差太远,估计一般也就几十ms的差别。但是如果是通过http轮询,不太可能几十ms全部轮询一次。所以,做量化的话,用http协议是最次的选择。能找到的数据提供商,对照着大智慧的行情测试,大部分挂着websocket名头的数据源,数据......
  • MacBook卸载应用程序,彻底卸载MacBook应用程序的秘诀
    在日常使用MacBook的过程中,安装和卸载应用程序是常见的操作。然而,许多用户发现,仅仅将应用程序拖入“废纸篓”后并清空并不能彻底删除所有相关文件。这些残留文件不仅会占用宝贵的存储空间,还可能导致系统性能下降或应用冲突。为此,掌握MacBook卸载应用程序的正确方法显得尤为重要......
  • 错误修改系列---基于RNN模型的心脏病预测(pytorch实现)
    前言前几天发布了pytorch实现,TensorFlow实现为:基于RNN模型的心脏病预测(tensorflow实现),但是一处繁琐地方+一处错误,这篇文章进行修改,修改效果还是好了不少;源文章为:基于RNN模型的心脏病预测,提供tensorflow和pytorch实现错误一这个也不算是错误,就是之前数据标准化、划分......
  • Mac废纸篓文件删不掉?手把手教你,超简单!
    在使用苹果电脑(Mac)时,常常会遇到将文件拖入废纸篓后,却发现无法彻底删除的情况。这不仅占用了宝贵的存储空间,还可能影响系统的运行效率。那么,Mac废纸篓文件删不掉到底是因为什么?我们又该如何解决这一问题呢?本文将手把手教你几种超简单的方法,帮助你轻松清理Mac废纸篓中无法删除的......