Days of Code [3]
Ronaldo Peres
Posted on September 12, 2021
Hi everyone,
Now I have this one:
"You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0's.
"
1 Example
- Input: digits = [1, 2, 3]
- Output: digits = [1, 2, 4]
- Explanation: The array represents the integer 123.
- Incrementing by one gives 123 + 1 = 124.
- Thus, the result should be [1,2,4].
2 Example
- Input: digits = [4,3,2,1]
- Output: [4,3,2,2]
- Explanation: The array represents the integer 4321.
- Incrementing by one gives 4321 + 1 = 4322.
- Thus, the result should be [4,3,2,2].
3 Example
- Input: digits = [9,9,9]
- Output: [1,0,0,0]
- Explanation: The array represents the integer 99.
- Incrementing by one gives 999 + 1 = 1000.
- Thus, the result should be [1,0,0,0].
Constraints:
- 1 <= digits.length <= 100
- 0 <= digits[i] <= 9
- digits does not contain any leading 0's.
Observations
Need to figure out how to solve this one without converting to int or long, since the array can pass the MaxValue, for example:
The int.Maxvalue = 2147483647;
We can have this input:
- Input: digits = [9,8,7,6,5,4,3,2,1,0]
So if you think to solve:
- Join the array and get a string "9876543210"
- When parse it to int we get this, cause we pass the MaxValue:
- System.OverflowException: 'Value was either too large or too small for an Int32.'
Here is my solution:
public static class PlusOneArray
{
public static int[] PlusOne(int[] digits)
{
var numOfNine = GetNines(digits);
if (numOfNine > 0)
{
if (digits.Length != numOfNine)
{
digits[digits.Length - numOfNine - 1] += 1;
}
else
{
digits[digits.Length - numOfNine] = 1;
var newDigits = new int[digits.Length + 1];
digits.CopyTo(newDigits, 0);
digits = newDigits;
}
int i = digits.Length - numOfNine;
for (; i < digits.Length; i++)
{
digits[i] = 0;
}
}
else
{
digits[digits.Length - 1] = digits[digits.Length - 1] + 1;
}
return digits;
}
private static int GetNines(int[] digits)
{
int n = 0;
for (int i = digits.Length - 1; i >= 0; i--)
{
if (digits[i] == 9)
n++;
else
break;
}
return n;
}
}
Also this is at my github:
Happy coding!!
💖 💪 🙅 🚩
Ronaldo Peres
Posted on September 12, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.