1. 程式人生 > >Leetcode537 Complex Number Multiplication Java實現

Leetcode537 Complex Number Multiplication Java實現

string 發現 需要 java實現 dex com 尋找 info oid

沒接觸過在Java中對字符串進行尋找字符或者切片的操作,所以剛上手時感覺有點難受。後來翻看API確認了兩種思路,方法1是用String.indexOf找到String裏+和i的位置,之後使用String.substring方法得到切分後的兩個子String,之後用Integer.valueOf,得到實部和虛部的兩個數,進而進行乘法,最後通過String.format方法構建字符串即可。方法2是用String.split(regex)來分離字符。

先實現了方法1:

public class ComplexNumberMultiplication {
    //法1:用String.indexOf;法2:用String.split(regex)。之後用Integer.valueOf()。
public static int[] getNumv1(String t) { int PLUSINDEX = t.indexOf("+"); int iINDEX = t.indexOf("i"); int[] x = new int[2]; x[0] = Integer.valueOf(t.substring(0, PLUSINDEX)); x[1] = Integer.valueOf(t.substring(PLUSINDEX+1, iINDEX)); return x; }
public String complexNumberMultiply(String a, String b) { int[] xa = getNumv1(a); int[] xb = getNumv1(b); int[] result = new int[2]; result[0]=xa[0]*xb[0]-xa[1]*xb[1]; result[1]=xa[0]*xb[1]+xa[1]*xb[0]; String r = String.format("%d+%di",result[0],result[1]);
return r; } }

技術分享圖片

使用正則表達式的split方法:

    public static int[] getNumv2(String t) {
        String[] t1 = t.split("\\+|i");        //java首先將這個regex字符串解析為"\+|i"(字符串的自動解析),然後這個"\+|i"作為regex再代表"+|i"
        int[] x = new int[2];
        x[0] = Integer.valueOf(t1[0]);
        x[1] = Integer.valueOf(t1[1]);
        return x;
    }
    public String complexNumberMultiply(String a, String b) {
        int[] xa = getNumv2(a);
        int[] xb = getNumv2(b);
        int[] result = new int[2];
        result[0]=xa[0]*xb[0]-xa[1]*xb[1];
        result[1]=xa[0]*xb[1]+xa[1]*xb[0];
        String r = String.format("%d+%di",result[0],result[1]);
        return r;
    }
//    public static void main(String[] args) {
//        String t = "a+bi";
//        String[] t1 = t.split("\\+|i");
//        for (String s:t1) System.out.println(s.equals("")?"Nothing":s);
//    }

技術分享圖片

慢了很多,看來split或正則匹配效率並不高,追求速度盡量還用最原始的思路。

對方法1進行改進(很少,基本沒有)得到方法3:

    public static int[] getNumv3(String t) {
        int PLUSINDEX = t.indexOf("+");
        int[] x = new int[2];
        x[0] = Integer.valueOf(t.substring(0, PLUSINDEX));
        x[1] = Integer.valueOf(t.substring(PLUSINDEX+1, t.length()-1));
        return x;
    }
    public String complexNumberMultiply(String a, String b) {
        int[] xa = getNumv3(a);
        int[] xb = getNumv3(b);
        int[] result = new int[2];
        result[0]=xa[0]*xb[0]-xa[1]*xb[1];
        result[1]=xa[0]*xb[1]+xa[1]*xb[0];
        String r = String.format("%d+%di",result[0],result[1]);
        return r;
    }

技術分享圖片

即不求i的index了,用t的length-1代替,發現提高了0.03%,沒有提高太多,看來調用length也是需要循環的(?存疑),但是會比循環一邊找index快一些。

再優化能咋優化?自己寫valueOf方法?也不一定比原來的效率高呢。(限制在了[-100,100]速度可能會快一個if)。

Leetcode537 Complex Number Multiplication Java實現