Header Ad

Leetcode Multiply Strings problem solution

In this Leetcode Multiply Strings problem solution, we have given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.

Leetcode Multiply Strings problem solution


Problem solution in Python.

class Solution:
    def multiply(self, num1, num2):
        num1_num = 0
        for each in num1:
            asc = ord(each)
            num = asc - 48
            num1_num = num1_num*10+num
        num2_num = 0
        for each in num2:
            asc = ord(each)
            num = asc - 48
            num2_num = num2_num*10+num
        mul = num1_num * num2_num
        if mul == 0:
            return '0'
        strlist = []
        while mul != 0:
            digit = mul%10
            strlist.append(digit)
            mul = (mul- digit)//10
        result = ''
        for each in strlist:
            newstr = chr(each+48)
            result = newstr + result
        return result



Problem solution in Java.

public String multiply(String num1, String num2) {
        if ("0".equals(num1) || "0".equals(num2)) {
            return "0";
        }
        int num1Len = num1.length();
        int num2Len = num2.length();
        int t;
        int[] res = new int[num1Len + num2Len];
        for (int i = num1Len - 1; i >= 0; i--) {
            for (int j = num2Len - 1, r = num1Len - 1 - i; j >= 0; j--, r++) {
                res[r] += (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
                if (res[r] > 9) {
                    t = res[r];
                    res[r] = t % 10;
                    res[r + 1] += t / 10 % 10;
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < res.length; i++) {
            if (sb.length() == 0 && res[res.length - 1 - i] == 0) {
                continue;
            }
            sb.append(res[res.length - 1 - i]);
        }
        return sb.toString();
    }


Problem solution in C++.

class Solution {
public:
    string multiply(string num1, string num2) {
        int n1 = num1.length(), n2 = num2.length();
        if(n1 == 0 || n2 == 0)  return "";
        string res(n1+n2, '0');
        int c = 0;
        for(int i = n1-1; i >= 0; i--){
            for(int j = n2-1; j >= 0; j--){
                int tmp = (num1[i]-'0')*(num2[j]-'0')+c+res[i+j+1]-'0';
                res[i+j+1] = tmp%10+'0';
                c = tmp/10;
            }
            res[i] += c;
            c = 0;
        }
        int start = 0;
        while(start < res.length() && res[start] == '0')
            start++;
        if(start == res.length())
            return "0";
        return res.substr(start);
    }
};


Problem solution in C.

char* multiply(char* arg1, char* arg2) {
    int len = strlen(arg1) + strlen(arg2);
    char *result = malloc(sizeof(char) * (len + 1));
    int acc;
    int k = 0;
    
    for (int i = 0; i < len+1; i++)
        result[i] = '0';
    for (int i = strlen(arg1)-1; i >= 0; i--){
        for (int j = strlen(arg2)-1; j >= 0; j--){
            acc = (arg1[i] - '0') * (arg2[j] - '0') + (result[i + j + 1] - '0');
            result[i+j+1] = (acc % 10) + '0';
            result[i+j] = ((acc /10) + (result[i + j] - '0')) + '0';
        }
    }
    result[len] = 0;
    while (result[k] == '0')
        k++;
    return strlen(result+k) > 0 ? result+k : "0";
}


Post a Comment

0 Comments