LeetCode第537题 – 复数乘法

60 views

题目

给定两个表示复数的字符串。

返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。

示例 1:

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

示例 2:

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

注意:

输入字符串不包含额外的空格。
输入字符串将以 a+bi 的形式给出,其中整数 a 和 b 的范围均在 [-100, 100] 之间。输出也应当符合这种形式。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/complex-number-multiplication
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

class Solution {
    public String complexNumberMultiply(String a, String b) {
        java.util.regex.Pattern p = java.util.regex.Pattern.compile("([\\+\\-]?\\d{1,})\\+([\\+\\-]?\\d{1,})i");
        java.util.regex.Matcher m1 = p.matcher(a);
        java.util.regex.Matcher m2 = p.matcher(b);
        
        if (!m1.matches() || !m2.matches()) {
            return "";
        }
        
        int a1 = Integer.parseInt(m1.group(1));
        int b1 = Integer.parseInt(m1.group(2));
        
        int a2 = Integer.parseInt(m2.group(1));
        int b2 = Integer.parseInt(m2.group(2)); 
        
        int v1 = a1 * a2 - b1 * b2;
        int v2 = a1 * b2 + a2 * b1;
        
        String result = "";
        result = String.format("%d+%di", v1, v2);
        
        return result;
    }
}

要点
需要对复数的运算规则有所了解。
我使用正则表达式来提取复数的实数部分和虚数部分,由于无法写import语句,因此使用相关类的全名,如java.util.regex.Patternjava.util.regex.Matcher

准备的用例,如下

    @Test
    public void test01() {
        String value = new L537().complexNumberMultiply("1+1i", "1+1i");
        assertEquals("0+2i", value);
    }
    @Test
    public void test02() {
        String value = new L537().complexNumberMultiply("1+-1i", "1+-1i");
        assertEquals("0+-2i", value);
    }

    @Test
    public void test03() {
        String value = new L537().complexNumberMultiply("1+1i", "1+-1i");
        assertEquals("2+0i", value);
    }
    
    @Test
    public void test04() {
        String value = new L537().complexNumberMultiply("-1+1i", "1+1i");
        assertEquals("-2+0i", value);
    }
    
    @Test
    public void test05() {
        String value = new L537().complexNumberMultiply("-1+1i", "-1+1i");
        assertEquals("0+-2i", value);
    }
    
    @Test
    public void test06() {
        String value = new L537().complexNumberMultiply("0+1i", "1+1i");
        assertEquals("-1+1i", value);
    }
    
    @Test
    public void test07() {
        String value = new L537().complexNumberMultiply("0+1i", "0+1i");
        assertEquals("-1+0i", value);
    }


若非注明,均为原创,欢迎转载,转载请注明来源:LeetCode第537题 – 复数乘法

关于 JackieAtHome

基层程序员,八年之后重新启航

此条目发表在 Java, LeetCode 分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Protected with IP Blacklist CloudIP Blacklist Cloud