Skip to content

Commit 5d4fd7f

Browse files
committed
Added 4 solutions
1 parent 708e542 commit 5d4fd7f

4 files changed

+239
-0
lines changed

Medium/Missing Ranges.java

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
class Solution {
2+
public static List<String> findMissingRanges(int[] nums, int lower, int upper) {
3+
List<String> list = new ArrayList<>();
4+
5+
if (nums.length == 0) {
6+
list.add(getString(lower, upper));
7+
return list;
8+
}
9+
10+
List<String> range = getRange(nums);
11+
int i = 0;
12+
13+
while (lower <= upper && i < range.size()) {
14+
String s = range.get(i);
15+
if (s.indexOf('>') != -1) {
16+
int start = Integer.parseInt(s.split("->")[0]);
17+
int end = Integer.parseInt(s.split("->")[1]);
18+
19+
if (lower != start) {
20+
list.add(getString(lower, start-1));
21+
}
22+
23+
lower = end + 1;
24+
}
25+
else {
26+
int num = Integer.parseInt(s);
27+
if (lower != num) {
28+
list.add(getString(lower, num-1));
29+
}
30+
31+
lower = num + 1;
32+
}
33+
34+
i++;
35+
}
36+
37+
String s = range.get(range.size()-1);
38+
if (s.indexOf('>') != -1) {
39+
int start = Integer.parseInt(s.split("->")[0]);
40+
int end = Integer.parseInt(s.split("->")[1]);
41+
42+
if (end != upper) {
43+
list.add(getString(end+1, upper));
44+
}
45+
}
46+
else {
47+
int num = Integer.parseInt(s);
48+
if (upper != num) {
49+
list.add(getString(num+1, upper));
50+
}
51+
}
52+
53+
return list;
54+
}
55+
56+
private static List<String> getRange(int[] num) {
57+
58+
List<String> list = new ArrayList<>();
59+
if (num.length == 0) {
60+
return list;
61+
}
62+
63+
int i = 1;
64+
StringBuilder sb = new StringBuilder();
65+
sb.append(num[0]);
66+
int count = 1;
67+
68+
while (i<num.length) {
69+
if (num[i] - num[i-1] == 1 || num[i] - num[i-1] == 0) {
70+
count++;
71+
}
72+
else {
73+
if (count > 1) {
74+
sb.append("->").append(num[i-1]);
75+
list.add(sb.toString());
76+
}
77+
else {
78+
list.add(sb.toString());
79+
}
80+
81+
sb = new StringBuilder();
82+
sb.append(num[i]);
83+
count = 1;
84+
}
85+
86+
i++;
87+
}
88+
89+
if (count > 1) {
90+
sb.append("->").append(num[num.length-1]);
91+
}
92+
93+
list.add(sb.toString());
94+
95+
return list;
96+
}
97+
98+
private static String getString(int start, int end) {
99+
StringBuilder sb = new StringBuilder();
100+
if (start == end) {
101+
sb.append(start);
102+
}
103+
else {
104+
sb.append(start).append("->").append(end);
105+
}
106+
107+
return sb.toString();
108+
}
109+
}

Medium/Multiply Strings.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Solution {
2+
public static String multiply(String num1, String num2) {
3+
int[] ans = new int[num1.length() * num2.length() + 1];
4+
int pointer = ans.length-1;
5+
int carry = 0;
6+
7+
for (int i=num2.length()-1; i>=0; i--) {
8+
int k = pointer;
9+
for (int j=num1.length()-1; j>=0; j--) {
10+
int prod = ans[k] + (num1.charAt(j) - '0') * (num2.charAt(i) - '0')+ carry;
11+
if (prod > 9) {
12+
carry = prod/10;
13+
prod = prod%10;
14+
}
15+
else {
16+
carry = 0;
17+
}
18+
19+
ans[k--] = prod;
20+
}
21+
22+
while (carry > 0) {
23+
int prod = ans[k] + carry;
24+
if (prod > 9) {
25+
carry = prod/10;
26+
prod = prod%10;
27+
}
28+
else {
29+
carry = 0;
30+
}
31+
32+
ans[k--] = prod;
33+
}
34+
35+
pointer--;
36+
}
37+
38+
int start = 0;
39+
40+
while (start < ans.length && ans[start] == 0) {
41+
start++;
42+
}
43+
44+
StringBuilder sb = new StringBuilder();
45+
while (start < ans.length) {
46+
sb.append(ans[start++]);
47+
}
48+
49+
return sb.length() == 0 ? "0" : sb.toString();
50+
}
51+
}

Medium/One Edit Distance.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class Solution {
2+
public static boolean isOneEditDistance(String s, String t) {
3+
if (Math.abs(s.length() - t.length()) > 1) {
4+
return false;
5+
}
6+
else if (s.length() - t.length() == 0) {
7+
if (s.equals(t)) {
8+
return false;
9+
}
10+
11+
boolean missed = false;
12+
for (int i=0; i<s.length(); i++) {
13+
if (s.charAt(i) == t.charAt(i)) {
14+
continue;
15+
}
16+
if (missed) {
17+
return false;
18+
}
19+
20+
missed = true;
21+
}
22+
return true;
23+
}
24+
25+
return s.length() - t.length() == 1 ? oneDeleteOnly(s,t) : oneDeleteOnly(t,s);
26+
}
27+
28+
private static boolean oneDeleteOnly(String s, String t) {
29+
if (t.length() == 0) {
30+
return true;
31+
}
32+
int i = 0;
33+
int j = 0;
34+
35+
while (i < s.length() && j < t.length()) {
36+
if (s.charAt(i) != t.charAt(j)) {
37+
if (i > j) {
38+
return false;
39+
}
40+
i++;
41+
continue;
42+
}
43+
44+
i++;
45+
j++;
46+
}
47+
48+
return true;
49+
}
50+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public static void reverseWords(char[] str) {
3+
int end = str.length-1;
4+
int start = 0;
5+
char[] ans = new char[str.length];
6+
7+
while(end >= 0) {
8+
while (end >= 0 && str[end] != ' ') {
9+
end--;
10+
}
11+
12+
int len = str.length - end - 1;
13+
int temp = end + 1;
14+
15+
while (start < len) {
16+
ans[start++] = str[temp++];
17+
}
18+
19+
if (start < str.length) {
20+
ans[start++] = ' ';
21+
end--;
22+
}
23+
}
24+
25+
for(int i=0; i<ans.length; i++) {
26+
str[i] = ans[i];
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)