提交 94cfc5ba 编写于 作者: L liu13

20190224

上级 3b593912
package code;
/*
* 171. Excel Sheet Column Number
* 题意:Excel列的表示转换为数字
* 难度:Easy
* 分类:Math
* 思路:注意AA代表的是27, 没有0的表示。26进位不是27。
* Tips:
*/
public class lc171 {
public int titleToNumber(String s) {
char[] ch_arr = s.toCharArray();
int res = 0;
for(int i=0; i<ch_arr.length; i++){
res += ( (ch_arr[i]-'A'+1) * Math.pow(26, ch_arr.length-1-i) );
}
return res;
}
}
package code;
/*
* 172. Factorial Trailing Zeroes
* 题意:求n!末尾有几个0
* 难度:Easy
* 分类:Math
* 思路:思路记一下。如果末尾为0,则一定是2*5得到的0,2的数量一定比5多,所以只考虑5的数量,25算两个5。
* Tips:题目看似简单,没做过的话不好想
*/
public class lc172 {
public int trailingZeroes(int n) {
if(n==0) return 0;
return n/5 + trailingZeroes(n/5);
}
}
package code;
/*
* 189. Rotate Array
* 题意:数组向后移几位,超出末尾的补到前边
* 难度:Easy
* 分类:Array
* 思路:一种换状替换,别忘了可能是多个环。
* reverse 的方法,先整体反转,再按照k划分成两个数组分别反转
* Tips:
*/
public class lc189 {
public void rotate(int[] nums, int k) {
if(nums.length<2) return;
int sum = 0;
for (int start_index = 0; start_index < nums.length ; start_index++) { //可能多个环,用sum判断是否停止
if(sum==nums.length) break;
int curr_index = start_index;
int next_index = (start_index+k)%nums.length;
int temp1 = nums[start_index];
int temp2 =0;
while(next_index!=start_index){
sum++;
temp2 = nums[next_index];
nums[next_index] = temp1;
temp1 =temp2;
curr_index = next_index;
next_index = (curr_index+k)%nums.length;
}
nums[start_index] = temp1;
sum++;
}
}
public void rotate2(int[] nums, int k) {
if(nums.length<2) return;
k = k%nums.length; //处理k>length的case
reverse(nums, 0, nums.length-1);
reverse(nums, 0, k-1);
reverse(nums, k, nums.length-1);
}
public void reverse(int[] nums, int begin, int end){
while(begin<end){
int temp = nums[begin];
nums[begin] = nums[end];
nums[end] = temp;
begin++;
end--;
}
return;
}
}
...@@ -7,7 +7,7 @@ import java.util.*; ...@@ -7,7 +7,7 @@ import java.util.*;
* 题意:课程是否能够完成 * 题意:课程是否能够完成
* 难度:Medium * 难度:Medium
* 分类:Depth-first Search, Breadth-first Search, Graph, Topology Sort * 分类:Depth-first Search, Breadth-first Search, Graph, Topology Sort
* 思路:两种方法,一种BFS拓扑排序,另一种DFS找是否有环 * 思路:两种方法,一种BFS拓扑排序(每个节点,先求出入度),另一种DFS找是否有环
* Tips:很经典的题,拓扑排序,判断图是否有环的DFS * Tips:很经典的题,拓扑排序,判断图是否有环的DFS
*/ */
public class lc207 { public class lc207 {
...@@ -17,8 +17,8 @@ public class lc207 { ...@@ -17,8 +17,8 @@ public class lc207 {
System.out.println(canFinish2(2, prerequisites)); System.out.println(canFinish2(2, prerequisites));
} }
public static boolean canFinish(int numCourses, int[][] prerequisites) { public static boolean canFinish(int numCourses, int[][] prerequisites) {
int[] indegree = new int[numCourses]; int[] indegree = new int[numCourses]; //计算入度
int[][] graph = new int[numCourses][numCourses]; int[][] graph = new int[numCourses][numCourses]; //邻接矩阵
for (int i = 0; i < prerequisites.length ; i++) { for (int i = 0; i < prerequisites.length ; i++) {
int node1 = prerequisites[i][0]; int node1 = prerequisites[i][0];
int node2 = prerequisites[i][1]; int node2 = prerequisites[i][1];
......
package code;
import java.util.ArrayDeque;
import java.util.Queue;
/*
* 210. Course Schedule II
* 题意:课程是否能够完成
* 难度:Medium
* 分类:Depth-first Search, Breadth-first Search, Graph, Topology Sort
* 思路:两种方法,一种BFS拓扑排序(每个节点,先求出入度),另一种DFS找是否有环
* Tips:和lc207一模一样,换了个输出
* 注意先统计入度并转化为邻接矩阵,之后就好操作了
*/
public class lc210 {
public static void main(String[] args) {
int[][] prerequisites = {{1,0},{2,0},{3,1},{3,2}};
//System.out.println(canFinish(2, prerequisites));
System.out.println(findOrder(4, prerequisites));
}
public static int[] findOrder(int numCourses, int[][] prerequisites) {
int[] degrees = new int[numCourses];
int[][] graph = new int[numCourses][numCourses];
for (int i = 0; i < prerequisites.length ; i++) {
int course1 = prerequisites[i][0];
int course2 = prerequisites[i][1];
graph[course2][course1] = 1;
degrees[course1]++;
}
Queue<Integer> qu = new ArrayDeque();
int[] res = new int[numCourses];
int sum = 0;
for (int i = 0; i < degrees.length ; i++) {
if(degrees[i]==0) {
qu.add(i);
res[sum] = i;
sum++;
}
}
while(!qu.isEmpty()){
int curr_course = qu.remove();
for (int i = 0; i < numCourses ; i++) {
if(graph[curr_course][i]==1){
degrees[i]--;
if(degrees[i]==0){
qu.add(i);
res[sum] = i;
sum++;
}
}
}
}
return sum==numCourses ? res : new int[0];
}
}
...@@ -106,12 +106,16 @@ Language: Java ...@@ -106,12 +106,16 @@ Language: Java
| 152 [Java](./code/lc152.java) | 152 [Java](./code/lc152.java)
| 155 [Java](./code/lc155.java) | 155 [Java](./code/lc155.java)
| 160 [Java](./code/lc160.java) | 160 [Java](./code/lc160.java)
| 162 [Java](./code/lc162.java)
| 166 [Java](./code/lc166.java)
| 169 [Java](./code/lc169.java) | 169 [Java](./code/lc169.java)
| 179 [Java](./code/lc179.java)
| 198 [Java](./code/lc198.java) | 198 [Java](./code/lc198.java)
| 200 [Java](./code/lc200.java) | 200 [Java](./code/lc200.java)
| 206 [Java](./code/lc206.java) | 206 [Java](./code/lc206.java)
| 207 [Java](./code/lc207.java) | 207 [Java](./code/lc207.java)
| 208 [Java](./code/lc208.java) | 208 [Java](./code/lc208.java)
| 212 [Java](./code/lc212.java)
| 215 [Java](./code/lc215.java) | 215 [Java](./code/lc215.java)
| 221 [Java](./code/lc221.java) | 221 [Java](./code/lc221.java)
| 226 [Java](./code/lc226.java) | 226 [Java](./code/lc226.java)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册