Skip to content

Commit fd5926f

Browse files
committed
[Function add]
1. Add leetcode solutions with tag Amazon.
1 parent 5fc32ef commit fd5926f

File tree

3 files changed

+239
-1
lines changed

3 files changed

+239
-1
lines changed

leetcode/289. Game of Life.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,39 @@ class Solution {
124124
return count;
125125
}
126126
}
127-
```
127+
```
128+
129+
### Amazon Session
130+
* Method 1: Bit Manipulation
131+
1. Use the second lowest bit to save the state of next generation.
132+
2. State compression: use a 3 * 3 matrix to traversal the board
133+
* if count == 3: current is live and 2 neighbors, current is dead and 3 neighbors(reproduction).
134+
* count - board = 3, current is live and 3 neighbors, so count is 4.
135+
```Java
136+
class Solution {
137+
public void gameOfLife(int[][] board) {
138+
if(board == null || board.length == 0 || board[0].length == 0) return;
139+
int height = board.length, width = board[0].length;
140+
for(int i = 0; i < height; i++){
141+
for(int j = 0; j < width; j++){
142+
//center is (i, j)
143+
int count = 0;
144+
for(int p = Math.max(0, i - 1); p <= Math.min(height - 1, i + 1); p++){
145+
for(int q = Math.max(0, j - 1); q <= Math.min(width - 1, j + 1); q++){
146+
count += board[p][q] & 1;
147+
}
148+
}
149+
if(count == 3 || count - board[i][j] == 3) board[i][j] |= 0B10;
150+
}
151+
}
152+
for(int i = 0; i < height; i++){
153+
for(int j = 0; j < width; j++){
154+
board[i][j] >>= 1;
155+
}
156+
}
157+
}
158+
}
159+
```
160+
161+
### Reference
162+
1. [花花酱 LeetCode 289. Game of Life](http://zxi.mytechroad.com/blog/simulation/leetcode-289-game-of-life/);

leetcode/445. Add Two Numbers II.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,5 +171,129 @@ Output: 7 -> 8 -> 0 -> 7
171171
}
172172
```
173173

174+
### Amazon Session
175+
* Method 1: recursion
176+
```Java
177+
/**
178+
* Definition for singly-linked list.
179+
* public class ListNode {
180+
* int val;
181+
* ListNode next;
182+
* ListNode(int x) { val = x; }
183+
* }
184+
*/
185+
class Solution {
186+
private int len1;
187+
private int len2;
188+
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
189+
ListNode cur1 = l1;
190+
int len1 = 0;
191+
while(cur1 != null){
192+
len1++;
193+
cur1 = cur1.next;
194+
}
195+
ListNode cur2 = l2;
196+
int len2 = 0;
197+
while(cur2 != null){
198+
len2++;
199+
cur2 = cur2.next;
200+
}
201+
this.len1 = Math.max(len1, len2);
202+
this.len2 = Math.min(len1, len2);
203+
ListNode first = len1 >= len2 ? l1: l2;
204+
ListNode second = len1 >= len2 ? l2: l1;
205+
ListNode next = add(first, this.len1 - 1, second, this.len2 - 1);
206+
if(next.val < 10) return next;
207+
else{
208+
int carry = next.val / 10;
209+
next.val %= 10;
210+
ListNode res = new ListNode(carry);
211+
res.next = next;
212+
return res;
213+
}
214+
215+
}
216+
public ListNode add(ListNode l1, int index1, ListNode l2, int index2){ // we garantee l1 is longer
217+
if(index1 == 0 && index2 == 0){
218+
return new ListNode(l1.val + l2.val);
219+
}else if(index1 > index2){
220+
ListNode next = add(l1.next, index1 - 1, l2, index2);
221+
int carry = next.val / 10;
222+
next.val %= 10;
223+
ListNode res = new ListNode(carry + l1.val);
224+
res.next = next;
225+
return res;
226+
}else{
227+
ListNode next = add(l1.next, index1 - 1, l2.next, index2 - 1);
228+
int carry = next.val / 10;
229+
next.val %= 10;
230+
ListNode res = new ListNode(carry + l1.val + l2.val);
231+
res.next = next;
232+
return res;
233+
}
234+
}
235+
}
236+
```
237+
238+
* Method 2: reverse the string
239+
```Java
240+
/**
241+
* Definition for singly-linked list.
242+
* public class ListNode {
243+
* int val;
244+
* ListNode next;
245+
* ListNode(int x) { val = x; }
246+
* }
247+
*/
248+
class Solution {
249+
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
250+
ListNode cur1 = l1, pre1 = null;
251+
while(cur1 != null){
252+
ListNode next = cur1.next;
253+
cur1.next = pre1;
254+
pre1 = cur1;
255+
cur1 = next;
256+
}
257+
ListNode cur2 = l2, pre2 = null;
258+
while(cur2 != null){
259+
ListNode next = cur2.next;
260+
cur2.next = pre2;
261+
pre2 = cur2;
262+
cur2 = next;
263+
}
264+
ListNode dummy = new ListNode(1), cur = dummy;
265+
// pre1 && pre2 are the new heads
266+
int carry = 0;
267+
while(pre1 != null || pre2 != null){
268+
int sum = 0;
269+
if(pre1 != null && pre2 != null){
270+
sum = pre1.val + pre2.val + carry;
271+
pre1 = pre1.next;
272+
pre2 = pre2.next;
273+
}else if(pre1 != null){
274+
sum = pre1.val + carry;
275+
pre1 = pre1.next;
276+
}else{
277+
sum = pre2.val + carry;
278+
pre2 = pre2.next;
279+
}
280+
carry = sum / 10;
281+
cur.next = new ListNode(sum % 10);
282+
cur = cur.next;
283+
}
284+
if(carry != 0) cur.next = new ListNode(1);
285+
ListNode res = dummy.next;
286+
cur2 = res; pre2 = null;
287+
while(cur2 != null){
288+
ListNode next = cur2.next;
289+
cur2.next = pre2;
290+
pre2 = cur2;
291+
cur2 = next;
292+
}
293+
return pre2;
294+
}
295+
}
296+
```
297+
174298
### Reference
175299
1. [Java O(n) recursive solution by counting the difference of length](https://leetcode.com/problems/add-two-numbers-ii/discuss/92643/Java-O(n)-recursive-solution-by-counting-the-difference-of-length)

leetcode/588. Design In-Memory File System.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,82 @@ Note:
113113
* String param_4 = obj.readContentFromFile(filePath);
114114
*/
115115
```
116+
117+
### Amazon Session
118+
* Method 1: Tire Tree
119+
```Java
120+
class FileSystem {
121+
private static final class Node{
122+
boolean isFile;
123+
String path;
124+
String content;
125+
Map<String, Node> map; //key is path name, value is child nodes.
126+
public Node(String path){
127+
this.map = new TreeMap<>();
128+
this.path = path;
129+
}
130+
}
131+
private Node root;
132+
public FileSystem() {
133+
this.root = new Node("/");
134+
root.path = "/";
135+
this.root.isFile = false;
136+
}
137+
private List<String> getListFromNode(Node node){
138+
List<String> res = new ArrayList<>();
139+
if(node.isFile){
140+
res.add(node.path);
141+
return res;
142+
}
143+
res.addAll(node.map.keySet());
144+
res.sort((a, b)->{
145+
return a.compareTo(b);
146+
});
147+
return res;
148+
}
149+
public List<String> ls(String path) {
150+
String[] tokens = path.split("\\/");
151+
List<String> result = new ArrayList<>();
152+
if(path.equals("/")) return getListFromNode(root);
153+
Node temp = this.root;
154+
for(int i = 1; i < tokens.length; i++){
155+
if(!temp.map.containsKey(tokens[i])) return result;
156+
temp = temp.map.get(tokens[i]);
157+
}
158+
return getListFromNode(temp);
159+
}
160+
private Node createOrGetByPath(String path){
161+
String[] tokens = path.split("\\/");
162+
Node temp = this.root;
163+
for(int i = 1; i < tokens.length; i++){
164+
if(!temp.map.containsKey(tokens[i])) temp.map.put(tokens[i], new Node(tokens[i]));
165+
temp = temp.map.get(tokens[i]);
166+
}
167+
return temp;
168+
}
169+
public void mkdir(String path) {
170+
createOrGetByPath(path);
171+
}
172+
public void addContentToFile(String filePath, String content) {
173+
Node file = createOrGetByPath(filePath);
174+
if(file.content == null){
175+
file.isFile = true;
176+
file.content = content;
177+
}else{
178+
file.content += content;
179+
}
180+
}
181+
public String readContentFromFile(String filePath) {
182+
Node file = createOrGetByPath(filePath);
183+
return file.content;
184+
}
185+
}
186+
/**
187+
* Your FileSystem object will be instantiated and called as such:
188+
* FileSystem obj = new FileSystem();
189+
* List<String> param_1 = obj.ls(path);
190+
* obj.mkdir(path);
191+
* obj.addContentToFile(filePath,content);
192+
* String param_4 = obj.readContentFromFile(filePath);
193+
*/
194+
```

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy