Skip to content

Commit 7e970d4

Browse files
committed
First commit.
0 parents  commit 7e970d4

5 files changed

+263
-0
lines changed

AddBinary1.java

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
public class Solution {
2+
public String addBinary(String a, String b) {
3+
// Start typing your Java solution below
4+
// DO NOT write main() function
5+
int lenA = a.length();
6+
int lenB = b.length();
7+
if (lenA < 1 || lenB < 1) return "";
8+
if (lenA < lenB){
9+
String temp = a;
10+
a = b;
11+
b = temp;
12+
}
13+
lenA = a.length();
14+
lenB = b.length();
15+
if (isZero(b)) return a;
16+
ArrayList<Character> chars = new ArrayList<Character>();
17+
char carry = '0';
18+
int i;
19+
for (i = lenB - 1; i >= 0; i--){
20+
if (a.charAt(i + lenA - lenB) == '1' && b.charAt(i) == '1'){
21+
chars.add(carry);
22+
carry = '1';
23+
}
24+
else if (a.charAt(i + lenA - lenB) == '0' && b.charAt(i) == '0'){
25+
chars.add(carry);
26+
carry = '0';
27+
}
28+
else{
29+
if (carry == '0'){
30+
chars.add('1');
31+
}
32+
else {
33+
chars.add('0');
34+
}
35+
}
36+
}
37+
38+
for (i = lenA - lenB - 1; i >= 0; i--){
39+
if (a.charAt(i) == '0'){
40+
chars.add(carry);
41+
carry = '0';
42+
}
43+
else{
44+
if (carry == '0'){
45+
chars.add('1');
46+
}
47+
else{
48+
chars.add('0');
49+
carry = '1';
50+
}
51+
}
52+
}
53+
if (carry == '1'){
54+
chars.add('1');
55+
}
56+
StringBuilder sb = new StringBuilder();
57+
for (i = chars.size() - 1; i >= 0; i --){
58+
sb.append(chars.get(i));
59+
}
60+
61+
return sb.toString();
62+
63+
64+
}
65+
public boolean isZero(String s){
66+
for (int i = 0; i < s.length(); i++){
67+
if (s.charAt(i) == '1'){
68+
return false;
69+
}
70+
}
71+
return true;
72+
}
73+
}

AddBinary2.java

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// A much better solution.
2+
public class Solution {
3+
public String addBinary(String a, String b) {
4+
// Start typing your Java solution below
5+
// DO NOT write main() function
6+
int l1 = a.length(), l2 = b.length();
7+
8+
StringBuilder sb = new StringBuilder();
9+
int carry = 0;
10+
11+
for (int i = 0; i < Math.max(l1, l2); i++) {
12+
int b1 = getBitAt(a, l1-1-i), b2 = getBitAt(b, l2-1-i);
13+
int sum = b1 + b2 + carry;
14+
sb.append(sum%2);
15+
carry = sum/2;
16+
}
17+
if (carry == 1) {
18+
sb.append(1);
19+
}
20+
return sb.reverse().toString();
21+
}
22+
23+
public int getBitAt(String s, int index) {
24+
if (index < 0) {
25+
return 0;
26+
}
27+
if (s.charAt(index) == '0') {
28+
return 0;
29+
}
30+
else {
31+
return 1;
32+
}
33+
}
34+
}

FourSum.java

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import java.util.*;
2+
3+
public class Solution {
4+
public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) {
5+
// Start typing your Java solution below
6+
// DO NOT write main() function
7+
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
8+
Set<ArrayList<Integer>> hSet = new HashSet<ArrayList<Integer>>();
9+
int n = num.length;
10+
Arrays.sort(num);
11+
for (int i = 0; i < n - 3; i++){
12+
for (int j = i + 1; j < n - 2; j ++){
13+
int p = j + 1;
14+
int q = n - 1;
15+
while (p < q){
16+
int sum = num[i] + num[j] + num[p] + num[q];
17+
if (sum == target){
18+
ArrayList<Integer> quadtuple = new ArrayList<Integer>();
19+
quadtuple.add(num[i]);
20+
quadtuple.add(num[j]);
21+
quadtuple.add(num[p]);
22+
quadtuple.add(num[q]);
23+
hSet.add(quadtuple);
24+
while (p + 1 < q && num[p + 1] == num[p]) {
25+
p ++;
26+
}
27+
28+
while (q - 1 > p && num[q - 1] == num[q]) {
29+
q --;
30+
}
31+
32+
p ++;
33+
q --;
34+
}
35+
else if(sum < target){
36+
p ++;
37+
}
38+
else{
39+
q --;
40+
}
41+
}
42+
while (j + 1 < n - 2 && num[j + 1] == num[j]){
43+
j ++;
44+
}
45+
}
46+
while (i + 1 < n - 3 && num[i + 1] == num[i]){
47+
i ++;
48+
}
49+
}
50+
result = new ArrayList<ArrayList<Integer>>(hSet);
51+
return result;
52+
}
53+
}

ThreeSum.java

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import java.util.*;
2+
public class Solution {
3+
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
4+
// Start typing your Java solution below
5+
// DO NOT write main() function
6+
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
7+
if (num.length < 3) return result;
8+
9+
Arrays.sort(num);
10+
11+
for (int i = 0; i < num.length; i++){
12+
int target = - num[i];
13+
twoSumWithHole(num, target, i, result);
14+
while (i + 1 < num.length && num[i + 1] == num[i]){
15+
i++;
16+
}
17+
}
18+
return result;
19+
}
20+
public void twoSumWithHole(int[] num, int target, int i, ArrayList<ArrayList<Integer>> result){
21+
int lp = i + 1;
22+
int rp = num.length - 1;
23+
while(lp < rp){
24+
int sum = num[lp] + num[rp];
25+
if (sum == target){
26+
ArrayList<Integer> couple = new ArrayList<Integer>();
27+
couple.add(num[i]);
28+
couple.add(num[lp]);
29+
couple.add(num[rp]);
30+
result.add(couple);
31+
while (lp + 1 < rp && num[lp + 1] == num[lp]) {
32+
lp ++;
33+
}
34+
lp ++;
35+
while (rp - 1 > lp && num[rp - 1] == num[rp]) {
36+
rp --;
37+
}
38+
rp --;
39+
}
40+
else if (sum < target){
41+
lp ++;
42+
}
43+
else{
44+
rp --;
45+
}
46+
}
47+
}
48+
}

ThreeSumClosest.java

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
public class Solution {
2+
public static int closest;
3+
public static int threeSum;
4+
public int threeSumClosest(int[] num, int target) {
5+
// Start typing your Java solution below
6+
// DO NOT write main() function
7+
closest = Integer.MAX_VALUE;
8+
threeSum = Integer.MIN_VALUE;
9+
if (num.length < 3) return 0;
10+
11+
Arrays.sort(num);
12+
13+
for (int i = 0; i < num.length; i++){
14+
calculateTuples(num, target, i);
15+
if (threeSum == target) return threeSum;
16+
while (i + 1 < num.length && num[i + 1] == num[i]){
17+
i++;
18+
}
19+
}
20+
return threeSum;
21+
}
22+
public void calculateTuples(int[] num, int target, int i){
23+
int lp = i + 1;
24+
int rp = num.length - 1;
25+
while(lp < rp){
26+
int sum = num[i] + num[lp] + num[rp];
27+
update3Sum(i, lp, rp, target, num);
28+
if (sum == target){
29+
while (lp + 1 < rp && num[lp + 1] == num[lp]) {
30+
lp ++;
31+
}
32+
lp ++;
33+
while (rp - 1 > lp && num[rp - 1] == num[rp]) {
34+
rp --;
35+
}
36+
rp --;
37+
}
38+
else if (sum < target){
39+
lp ++;
40+
}
41+
else{
42+
rp --;
43+
}
44+
}
45+
}
46+
47+
public void update3Sum(int i, int lp, int rp, int target, int[] num){
48+
int sum = num[lp] + num[rp] + num[i];
49+
int diff = Math.abs(target - sum);
50+
if (diff < closest){
51+
closest = diff;
52+
threeSum = sum;
53+
}
54+
}
55+
}

0 commit comments

Comments
 (0)