Leetcode--遞歸乘法

遞歸乘法。 寫一個遞歸函數,不使用 * 運算符, 實現兩個正整數的相乘。可以使用加號、減號、位移,但要吝嗇一些。

示例1:

 輸入:A = 1, B = 10
 輸出:10
示例2:

 輸入:A = 3, B = 4
 輸出:12
提示:

保證乘法範圍不會溢出

思路

因爲乘法可以分解成加法,所以可以遞歸求和

class Solution {
public:
    int mul(int a, int b){
        // 如果b小於2,直接返回a,否則遞歸求和
        return b< 2? a: (a+= mul(a, b- 1));
    }
    int multiply(int A, int B) {
        // 如果A和B中有一個爲0,返回0
        if(A== 0|| B== 0) return 0;
        // 讓B取較小的可以減少運算
        if(A< B) swap(A, B);

        return mul(A, B);
    }
};

 

參考了Leetcode題解中其中一個解法,

可以理解成模擬了二進制中的乘法運算

class Solution {
public:
    int multiply(int A, int B) {
        // 讓B取較小的可以減少運算
        if(A< B) swap(A, B);

        int result= 0;
        // 模擬二進制位運算乘法
        for(int i= 0; B!= 0; ++i){
            if((B& 1)== 1)
                result+= (A<<i);
            B>>= 1;
        }
        return result;
    }
};

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章