Given two non-negative integers `num1` and `num2` represented as strings, return the product of `num1` and `num2`, also represented as a string.

Note: You must not use any built-in BigInteger library or convert the inputs to integer directly.

Example 1:

```Input: num1 = "2", num2 = "3"
Output: "6"
```

Example 2:

```Input: num1 = "123", num2 = "456"
Output: "56088"
```

Constraints:

• `1 <= num1.length, num2.length <= 200`
• `num1` and `num2` consist of digits only.
• Both `num1` and `num2` do not contain any leading zero, except the number `0` itself.

Solution:

``````/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function(num1, num2) {
let len1 = num1.length;
let len2 = num2.length;
let carry = 0;
let val = 0;
let index = 0;
let res = Array(len1 + len2).fill(0);

for (let i = len1 - 1; i >= 0; i--) {
carry = 0;
for (let j = len2 - 1; j >= 0; j--) {
// calucate from the right position and store in result array from index 0
// reverse it later
index = len1 + len2 - 2 - i - j;
// basic math calculation
val = (num1[i] * num2[j]) + res[index] + carry;
carry = Math.floor(val / 10);
res[index] = val % 10;
}
// check if has carry 1
if (carry) res[index + 1] = carry;
}

// before reverse, remove the begining 0
while (res.length > 1 && res[res.length - 1] === 0) res.pop();
return res.reverse().join("");
};``````