1. Brute Force
Algorithm
- Scan
num1from left to right, accumulating numeric value:val1 = val1 * 10 + (c - '0'). - Scan
num2from left to right, accumulating numeric value:val2 = val2 * 10 + (c - '0'). - Compute direct integer sum:
sum = val1 + val2. - Format the resulting integer into a string representation.
- Highlight catastrophic limitation: in languages with fixed-width integers, inputs exceeding 18 digits cause immediate integer overflow.
Naive String-to-Integer Parsing & Direct Addition Trace
2 of 2 questions left todayObservation: Scanning num1 = "456" from left to right
Observation: Scanning num1 = "456" from left to right. Parse character '4' at index 0.
Decision: Convert char code ('4' - '0') = 4. Accumulator val1 = 0 * 10 + 4 = 4.
Invariant: Partial integer value of prefix "4" is 4.
#include <iostream>#include <string>#include <algorithm> // Fallback BigInt simulation for standard C++class Solution {public: std::string addStrings(std::string num1, std::string num2) { std::string res = ""; int i = num1.size() - 1, j = num2.size() - 1, carry = 0; while (i >= 0 || j >= 0 || carry) { int sum = carry; if (i >= 0) sum += num1[i--] - '0'; if (j >= 0) sum += num2[j--] - '0'; res.push_back((sum % 10) + '0'); carry = sum / 10; } std::reverse(res.begin(), res.end()); return res; }}; int main() { Solution sol; std::cout << sol.addStrings("11", "123") << std::endl; // "134" std::cout << sol.addStrings("456", "77") << std::endl; // "533" return 0;}Time & Space Complexity
- Time complexity:
O(N + M)— Scanning each character of num1 and num2 takes O(N + M) time. - Space complexity:
O(1)— Direct integer conversion operates with O(1) auxiliary space.
Why Brute Force Doesn't Scale:
Naive brute force re-examines already processed substrings multiple times.
For N = 105, O(N2) requires 1010 operations (TLE), while O(N) finishes in < 10ms.