Given two strings denoting non-negative numbers X and Y. Calculate the sum of X and Y. 
Example 1:
Input:
X = "25", Y = "23"
Output:
48
Explanation:
The sum of 25 and 23 is 48.
Example 2:
Input:
X = "2500", Y = "23"
Output:
2523
Explanation:
The sum of 2500 and 23 is 2523.
Your Task:
Your task is to complete the function findSum() which takes two strings as inputs and returns the string without leading zeros. You do not need to take any input or print anything.
Expected Time Complexity: O(|X| + |Y|)
Expected Auxiliary Space: O(1)
Constraints:
1 <= |X|, |Y| <= 10^{5}

Difficulty: MEDIUM
Tags: String algorithms

Data structures
Skill types: Data structures
Expected Time Complexity: O(|X| + |Y|)
Expected Auxiliary Space: O(1)

Starter code:
#User function Template for python3

class Solution:

	def findSum(self, X, Y):

		# code here

Solutions:
class Solution:

	def findSum(self, X, Y):
		self.X = int(X)
		self.Y = int(Y)
		result = self.X + self.Y
		return result


class Solution:

	def findSum(self, X, Y):
		sum = int(X) + int(Y)
		return sum


class Solution:

	def findSum(self, X, Y):
		x = int(X)
		y = int(Y)
		A = str(x + y)
		return A


class Solution:

	def findSum(self, X, Y):
		x = int(X)
		y = int(Y)
		ans = x + y
		return ans


class Solution:

	def findSum(self, X, Y):
		d1 = int(X)
		d2 = int(Y)
		return d1 + d2


class Solution:

	def findSum(self, X, Y):
		return str(int(X) + int(Y))


class Solution:

	def findSum(self, X, Y):
		a = int(X)
		b = int(Y)
		return a + b


class Solution:

	def findSum(self, X, Y):
		num1 = int(X)
		num2 = int(Y)
		return num1 + num2


class Solution:

	def findSum(self, X, Y):
		x_pointer = len(X) - 1
		y_pointer = len(Y) - 1
		carry = 0
		string = ''
		while x_pointer >= 0 and y_pointer >= 0:
			num1 = ord(X[x_pointer]) - ord('0')
			num2 = ord(Y[y_pointer]) - ord('0')
			num = num1 + num2
			num += carry
			last_digit = num % 10
			carry = num // 10
			string += str(last_digit)
			x_pointer -= 1
			y_pointer -= 1
		while x_pointer >= 0:
			num1 = ord(X[x_pointer]) - ord('0')
			num = num1 + carry
			last_digit = num % 10
			carry = num // 10
			string += str(last_digit)
			x_pointer -= 1
		while y_pointer >= 0:
			num2 = ord(Y[y_pointer]) - ord('0')
			num = num2 + carry
			last_digit = num % 10
			carry = num // 10
			string += str(last_digit)
			y_pointer -= 1
		if carry:
			string += str(carry)
		string = string[::-1]
		string = string.lstrip('0')
		if not string:
			return '0'
		return string


class Solution:

	def findSum(self, X, Y):
		s = int(X) + int(Y)
		return s


class Solution:

	def findSum(self, x, y):
		a = int(x)
		b = int(y)
		return a + b


class Solution:

	def findSum(self, X, Y):
		num1 = int(X)
		num2 = int(Y)
		total = num1 + num2
		result = str(total)
		if result == '0':
			return result
		else:
			result = result.lstrip('0')
		return result


class Solution:

	def findSum(self, X, Y):
		x = int(X)
		y = int(Y)
		sum = x + y
		return int(sum)


class Solution:

	def findSum(self, X, Y):
		z = int(X) + int(Y)
		return z


class Solution:

	def findSum(self, X, Y):
		c = int(X) + int(Y)
		return c


class Solution:

	def findSum(self, X, Y):
		q = int(X)
		w = int(Y)
		s = str(q + w)
		return s


class Solution:

	def findSum(self, X, Y):
		z = int(X)
		y = int(Y)
		sum = z + y
		return sum


class Solution:

	def findSum(self, X, Y):
		e = int(x)
		s = int(y)
		d = e + s
		return d


class Solution:

	def findSum(self, x, y):
		s = int(x) + int(y)
		return str(s)


class Solution:

	def findSum(self, X, Y):
		a1 = int(X)
		a2 = int(Y)
		return a1 + a2


class Solution:

	def findSum(self, X, Y):
		a = int(X)
		b = int(Y)
		result = a + b
		return str(result)


class Solution:

	def findSum(self, X, Y):
		n = int(X) + int(Y)
		return n


class Solution:

	def findSum(self, X, Y):
		temp1 = int(X)
		temp2 = int(Y)
		return str(temp1 + temp2)


class Solution:

	def findSum(self, X, Y):
		a = int(x)
		b = int(y)
		c = a + b
		return c


class Solution:

	def getNum(self, str):
		pos = 1
		res = 0
		for i in range(len(str) - 1, -1, -1):
			res += (ord(str[i]) - ord('0')) * pos
			pos *= 10
		return res

	def findSum(self, X, Y):
		return int(X) + int(Y)


class Solution:

	def findSum(self, X, Y):
		n1 = int(X)
		n2 = int(Y)
		return n1 + n2


class Solution:

	def findSum(self, X, Y):
		t = int(X)
		t1 = int(Y)
		return t + t1


class Solution:

	def findSum(self, X, Y):
		(i, j) = (len(X) - 1, len(Y) - 1)
		output = []
		carry = 0
		while i >= 0 and j >= 0:
			sum = int(X[i]) + int(Y[j]) + carry
			(carry, curr_sum) = (int(sum / 10), sum % 10)
			output.append(str(curr_sum))
			i -= 1
			j -= 1
		while i >= 0:
			sum = int(X[i]) + carry
			(carry, curr_sum) = (int(sum / 10), sum % 10)
			output.append(str(curr_sum))
			i -= 1
		while j >= 0:
			sum = int(Y[j]) + carry
			(carry, curr_sum) = (int(sum / 10), sum % 10)
			output.append(str(curr_sum))
			j -= 1
		if carry:
			output.append(str(carry))
		return int(''.join(reversed(output)))


class Solution:

	def findSum(self, X, Y):
		x_int = int(X)
		y_int = int(Y)
		result = x_int + y_int
		return str(result)


class Solution:

	def findSum(self, X, Y):
		X = int(X)
		Y = int(Y)
		Z = X + Y
		return Z


class Solution:

	def findSum(self, X, Y):
		p = int(X)
		q = int(Y)
		return p + q


class Solution:

	def findSum(self, X, Y):
		first = int(X)
		second = int(Y)
		ans = str(first + second)
		return ans


class Solution:

	def findSum(self, X, Y):
		int1 = int(X)
		int2 = int(Y)
		return int1 + int2


class Solution:

	def findSum(self, X, Y):
		total = int(X) + int(Y)
		return total