Skip to content

Commit c608581

Browse files
committed
commit
0 parents  commit c608581

6 files changed

+134
-0
lines changed

2. Add Two Numbers.java

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* int val;
5+
* ListNode next;
6+
* ListNode() {}
7+
* ListNode(int val) { this.val = val; }
8+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+
* }
10+
*/
11+
class Solution {
12+
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
13+
int prev_reminder = 0; // This variable carry the reminder number from previous node
14+
15+
ListNode rev_out = null;
16+
17+
while (l1 != null || l2 != null || prev_raeminder != 0) {
18+
// Decide digit from linked lists
19+
int digit_l1 = (l1 != null) ? l1.val : 0,
20+
digit_l2 = (l2 != null) ? l2.val : 0;
21+
22+
// Sum digits and previous reminder
23+
int sum = digit_l1 + digit_l2 + prev_reminder;
24+
25+
// Update prev_reminder
26+
prev_reminder = sum / 10;
27+
28+
// Append new node
29+
ListNode new_node = new ListNode(sum % 10);
30+
31+
new_node.next = null;
32+
33+
if (rev_out == null) {
34+
rev_out = new_node;
35+
}
36+
else {
37+
ListNode curr_node = rev_out;
38+
39+
while (curr_node.next != null) {
40+
curr_node = curr_node.next;
41+
}
42+
43+
curr_node.next = new_node;
44+
}
45+
46+
// Update l1 & l2
47+
l1 = (l1 != null) ? l1.next : null;
48+
l2 = (l2 != null) ? l2.next : null;
49+
}
50+
51+
return rev_out;
52+
}
53+
}

278. First bad Version.c

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// The API isBadVersion is defined for you.
2+
// bool isBadVersion(int version);
3+
4+
int firstBadVersion(int n) {
5+
// Binary Search algorithm
6+
long lowBound = 1,
7+
highBound = n;
8+
9+
while (lowBound <= highBound) {
10+
long mid = (lowBound + highBound) / 2;
11+
12+
bool isBad = isBadVersion(mid);
13+
if (isBad && !isBadVersion(mid - 1)) return mid;
14+
else if (isBad && isBadVersion(mid - 1)) highBound = mid - 1;
15+
else lowBound = mid + 1;
16+
}
17+
18+
return -1;
19+
}

35. Search Insert Position.c

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
int searchInsert(int* nums, int numsSize, int target){
2+
// Use binary search alogirthm
3+
int lowBound = 0,
4+
highBound = numsSize - 1;
5+
6+
while (lowBound <= highBound) {
7+
int mid = (lowBound + highBound) / 2;
8+
9+
if (nums[mid] == target || (mid != 0 && nums[mid] > target && nums[mid - 1] < target)) {
10+
return mid;
11+
}
12+
else if (mid == numsSize - 1 && nums[mid] < target) return mid + 1;
13+
else if (nums[mid] > target) highBound = mid - 1;
14+
else lowBound = mid + 1;
15+
}
16+
17+
return 0;
18+
}

50. Pow(x, n).c

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
double myPow(double x, int n){
2+
// Use recursive method to find the power result
3+
if (x == 1 || n == 0) return 1;
4+
5+
// Shorten power
6+
if (n % 2 == 0) {
7+
x *= x;
8+
n /= 2;
9+
}
10+
11+
return (n < 0) ? myPow(x, n + 1) / x : x * myPow(x, n - 1);
12+
}

7. Reverse Integer.c

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
int reverse(int x){
2+
long temp = x;
3+
long reverse = 0;
4+
5+
// Reverse number algorithm
6+
while (temp) {
7+
reverse = reverse * 10 + temp % 10;
8+
temp /= 10;
9+
}
10+
11+
// Check if the reverse result of x go outside signed 32-bit range
12+
if (reverse < -pow(2, 31) || reverse > pow(2, 31) - 1) return 0;
13+
14+
return reverse;
15+
}

9. Palindrome Number.c

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
bool isPalindrome(int x){
2+
// Check if number bigger or equal to 0
3+
if (x >= 0) {
4+
long y = 0;
5+
int z = x;
6+
7+
// Reverse integer algorithm
8+
while (z) {
9+
y = y * 10 + z % 10;
10+
z /= 10;
11+
}
12+
13+
return x == y;
14+
}
15+
16+
return false;
17+
}

0 commit comments

Comments
 (0)