Skip to content

Commit 94cfc5b

Browse files
committed
20190224
1 parent 3b59391 commit 94cfc5b

File tree

6 files changed

+146
-3
lines changed

6 files changed

+146
-3
lines changed

Diff for: code/lc171.java

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package code;
2+
/*
3+
* 171. Excel Sheet Column Number
4+
* 题意:Excel列的表示转换为数字
5+
* 难度:Easy
6+
* 分类:Math
7+
* 思路:注意AA代表的是27, 没有0的表示。26进位不是27。
8+
* Tips:
9+
*/
10+
public class lc171 {
11+
public int titleToNumber(String s) {
12+
char[] ch_arr = s.toCharArray();
13+
int res = 0;
14+
for(int i=0; i<ch_arr.length; i++){
15+
res += ( (ch_arr[i]-'A'+1) * Math.pow(26, ch_arr.length-1-i) );
16+
}
17+
return res;
18+
}
19+
}

Diff for: code/lc172.java

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package code;
2+
/*
3+
* 172. Factorial Trailing Zeroes
4+
* 题意:求n!末尾有几个0
5+
* 难度:Easy
6+
* 分类:Math
7+
* 思路:思路记一下。如果末尾为0,则一定是2*5得到的0,2的数量一定比5多,所以只考虑5的数量,25算两个5。
8+
* Tips:题目看似简单,没做过的话不好想
9+
*/
10+
public class lc172 {
11+
public int trailingZeroes(int n) {
12+
if(n==0) return 0;
13+
return n/5 + trailingZeroes(n/5);
14+
}
15+
}

Diff for: code/lc189.java

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package code;
2+
/*
3+
* 189. Rotate Array
4+
* 题意:数组向后移几位,超出末尾的补到前边
5+
* 难度:Easy
6+
* 分类:Array
7+
* 思路:一种换状替换,别忘了可能是多个环。
8+
* reverse 的方法,先整体反转,再按照k划分成两个数组分别反转
9+
* Tips:
10+
*/
11+
public class lc189 {
12+
public void rotate(int[] nums, int k) {
13+
if(nums.length<2) return;
14+
int sum = 0;
15+
for (int start_index = 0; start_index < nums.length ; start_index++) { //可能多个环,用sum判断是否停止
16+
if(sum==nums.length) break;
17+
int curr_index = start_index;
18+
int next_index = (start_index+k)%nums.length;
19+
int temp1 = nums[start_index];
20+
int temp2 =0;
21+
while(next_index!=start_index){
22+
sum++;
23+
temp2 = nums[next_index];
24+
nums[next_index] = temp1;
25+
temp1 =temp2;
26+
curr_index = next_index;
27+
next_index = (curr_index+k)%nums.length;
28+
}
29+
nums[start_index] = temp1;
30+
sum++;
31+
}
32+
}
33+
34+
public void rotate2(int[] nums, int k) {
35+
if(nums.length<2) return;
36+
k = k%nums.length; //处理k>length的case
37+
reverse(nums, 0, nums.length-1);
38+
reverse(nums, 0, k-1);
39+
reverse(nums, k, nums.length-1);
40+
}
41+
public void reverse(int[] nums, int begin, int end){
42+
while(begin<end){
43+
int temp = nums[begin];
44+
nums[begin] = nums[end];
45+
nums[end] = temp;
46+
begin++;
47+
end--;
48+
}
49+
return;
50+
}
51+
}

Diff for: code/lc207.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* 题意:课程是否能够完成
88
* 难度:Medium
99
* 分类:Depth-first Search, Breadth-first Search, Graph, Topology Sort
10-
* 思路:两种方法,一种BFS拓扑排序,另一种DFS找是否有环
10+
* 思路:两种方法,一种BFS拓扑排序(每个节点,先求出入度),另一种DFS找是否有环
1111
* Tips:很经典的题,拓扑排序,判断图是否有环的DFS
1212
*/
1313
public class lc207 {
@@ -17,8 +17,8 @@ public static void main(String[] args) {
1717
System.out.println(canFinish2(2, prerequisites));
1818
}
1919
public static boolean canFinish(int numCourses, int[][] prerequisites) {
20-
int[] indegree = new int[numCourses];
21-
int[][] graph = new int[numCourses][numCourses];
20+
int[] indegree = new int[numCourses]; //计算入度
21+
int[][] graph = new int[numCourses][numCourses]; //邻接矩阵
2222
for (int i = 0; i < prerequisites.length ; i++) {
2323
int node1 = prerequisites[i][0];
2424
int node2 = prerequisites[i][1];

Diff for: code/lc210.java

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package code;
2+
3+
import java.util.ArrayDeque;
4+
import java.util.Queue;
5+
/*
6+
* 210. Course Schedule II
7+
* 题意:课程是否能够完成
8+
* 难度:Medium
9+
* 分类:Depth-first Search, Breadth-first Search, Graph, Topology Sort
10+
* 思路:两种方法,一种BFS拓扑排序(每个节点,先求出入度),另一种DFS找是否有环
11+
* Tips:和lc207一模一样,换了个输出
12+
* 注意先统计入度并转化为邻接矩阵,之后就好操作了
13+
*/
14+
public class lc210 {
15+
public static void main(String[] args) {
16+
int[][] prerequisites = {{1,0},{2,0},{3,1},{3,2}};
17+
//System.out.println(canFinish(2, prerequisites));
18+
System.out.println(findOrder(4, prerequisites));
19+
}
20+
public static int[] findOrder(int numCourses, int[][] prerequisites) {
21+
int[] degrees = new int[numCourses];
22+
int[][] graph = new int[numCourses][numCourses];
23+
for (int i = 0; i < prerequisites.length ; i++) {
24+
int course1 = prerequisites[i][0];
25+
int course2 = prerequisites[i][1];
26+
graph[course2][course1] = 1;
27+
degrees[course1]++;
28+
}
29+
Queue<Integer> qu = new ArrayDeque();
30+
int[] res = new int[numCourses];
31+
int sum = 0;
32+
for (int i = 0; i < degrees.length ; i++) {
33+
if(degrees[i]==0) {
34+
qu.add(i);
35+
res[sum] = i;
36+
sum++;
37+
}
38+
}
39+
while(!qu.isEmpty()){
40+
int curr_course = qu.remove();
41+
for (int i = 0; i < numCourses ; i++) {
42+
if(graph[curr_course][i]==1){
43+
degrees[i]--;
44+
if(degrees[i]==0){
45+
qu.add(i);
46+
res[sum] = i;
47+
sum++;
48+
}
49+
}
50+
}
51+
}
52+
return sum==numCourses ? res : new int[0];
53+
}
54+
}

Diff for: readme.md

+4
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,16 @@ Language: Java
106106
| 152 [Java](./code/lc152.java)
107107
| 155 [Java](./code/lc155.java)
108108
| 160 [Java](./code/lc160.java)
109+
| 162 [Java](./code/lc162.java)
110+
| 166 [Java](./code/lc166.java)
109111
| 169 [Java](./code/lc169.java)
112+
| 179 [Java](./code/lc179.java)
110113
| 198 [Java](./code/lc198.java)
111114
| 200 [Java](./code/lc200.java)
112115
| 206 [Java](./code/lc206.java)
113116
| 207 [Java](./code/lc207.java)
114117
| 208 [Java](./code/lc208.java)
118+
| 212 [Java](./code/lc212.java)
115119
| 215 [Java](./code/lc215.java)
116120
| 221 [Java](./code/lc221.java)
117121
| 226 [Java](./code/lc226.java)

0 commit comments

Comments
 (0)