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;
    }
};

 

 

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