Skip to content

Commit b485794

Browse files
committed
Add one more solution of AddStrings task
1 parent 4956631 commit b485794

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

src/main/java/by/andd3dfx/numeric/AddStrings.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package by.andd3dfx.numeric;
22

3+
import java.util.Iterator;
4+
35
/**
46
* <pre>
57
* <a href="https://leetcode.com/problems/add-strings/">Task description</a>
@@ -67,4 +69,44 @@ private static int calcAccumulator(int res, StringBuilder sb) {
6769
}
6870
return res / 10;
6971
}
72+
73+
public static String addStrings_usingIterators(String num1, String num2) {
74+
var iterator1 = new DigitsIterator(num1);
75+
var iterator2 = new DigitsIterator(num2);
76+
77+
var sb = new StringBuilder();
78+
var accumulator = 0;
79+
while (iterator1.hasNext() || iterator2.hasNext() || accumulator > 0) {
80+
int n1 = iterator1.next();
81+
int n2 = iterator2.next();
82+
83+
accumulator = calcAccumulator(n1 + n2 + accumulator, sb);
84+
}
85+
86+
return sb.reverse().toString();
87+
}
88+
89+
public static class DigitsIterator implements Iterator<Integer> {
90+
91+
private final char[] chars;
92+
private int index;
93+
94+
public DigitsIterator(String str) {
95+
this.chars = str.toCharArray();
96+
this.index = chars.length - 1;
97+
}
98+
99+
@Override
100+
public boolean hasNext() {
101+
return index >= 0;
102+
}
103+
104+
@Override
105+
public Integer next() {
106+
if (index >= 0) {
107+
return chars[index--] - '0';
108+
}
109+
return 0;
110+
}
111+
}
70112
}

src/test/java/by/andd3dfx/numeric/AddStringsTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,15 @@ public void addStrings() {
1616

1717
assertThat(AddStrings.addStrings("79", "179")).isEqualTo("258");
1818
}
19+
20+
@Test
21+
public void addStrings_usingIterators() {
22+
assertThat(AddStrings.addStrings_usingIterators("11", "123")).isEqualTo("134");
23+
assertThat(AddStrings.addStrings_usingIterators("456", "77")).isEqualTo("533");
24+
assertThat(AddStrings.addStrings_usingIterators("0", "0")).isEqualTo("0");
25+
assertThat(AddStrings.addStrings_usingIterators("1", "9")).isEqualTo("10");
26+
assertThat(AddStrings.addStrings_usingIterators("9", "99")).isEqualTo("108");
27+
28+
assertThat(AddStrings.addStrings_usingIterators("79", "179")).isEqualTo("258");
29+
}
1930
}

0 commit comments

Comments
 (0)