-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPlusOne.java
More file actions
122 lines (95 loc) · 2.69 KB
/
PlusOne.java
File metadata and controls
122 lines (95 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package Algorithms.IntegerArray;
import java.util.Arrays;
/**
* @author Srinivas Vadige, srinivas.vadige@gmail.com
* @since 05 March 2026
* @link 66. Plus One <a href="https://leetcode.com/problems/plus-one/">LeetCode Link</a>
* @topics Array, Math
* @companies Google(17), Amazon(8), Bloomberg(6), Meta(4), Microsoft(3), Intuit(4), Capgemini(2), TCS(6), Accenture(4), IBM(2), TikTok(2), Visa(2)
9
+ 9
----
18
+ 1 (carry)
9
+ 9
------
19
So two numbers additions carry can never exceed 1
When could carry be 2 or more?
9
9
9
----
27
Only if you add more numbers in the same column.
*/
public class PlusOne {
public static void main(String[] args) {
int[] digits = {1,2,3};
System.out.println("plusOne [1,2,3] -> " + Arrays.toString(plusOne(digits))); // Output: [1, 2, 4]
digits = new int[]{9,9,9};
System.out.println("plusOne [9,9,9] -> " + Arrays.toString(plusOne(digits))); // Output: [1, 0, 0, 0]
}
public static int[] plusOne(int[] digits) {
return plusOneUsingGenericCarryForward(digits);
}
/**
* @TimeComplexity O(n)
* @SpaceComplexity O(1)
*/
public static int[] plusOneUsingGenericCarryForward(int[] digits) {
int n = digits.length;
int carryForward = 1;
for (int i=n-1; i>=0; i--) {
int digit = digits[i];
digit += carryForward;
digits[i] = digit % 10;
carryForward = digit / 10;
}
if (carryForward == 0) {
return digits;
}
int[] result = new int[n+1];
result[0] = 1;
// System.arraycopy(digits, 0, result, 1, n);
for (int i=1; i<n+1; i++) {
result[i] = digits[i-1];
}
return result;
}
/**
* @TimeComplexity O(n)
* @SpaceComplexity O(1)
*/
public static int[] plusOneUsingSchoolbookAdditionWithCarry1(int[] digits) {
for (int i=digits.length-1; i>=0; i--){
if (digits[i]<9){
digits[i]++; // digits[i]+=1;
return digits;
}
digits[i]=0;
}
int[] result = new int[digits.length+1];
result[0] = 1;
return result;
}
/**
* @TimeComplexity O(n)
* @SpaceComplexity O(1)
*/
public static int[] plusOneUsingSchoolbookAdditionWithCarry2(int[] digits) {
int n = digits.length;
for (int i = n - 1; i >= 0; --i) {
if (digits[i] == 9) {
digits[i] = 0;
} else {
digits[i]++; // digits[i]+=1;
return digits;
}
}
digits = new int[n + 1];
digits[0] = 1;
return digits;
}
}