Skip to content

Commit c64e341

Browse files
committed
Merge pull request Hearen#100 from DuanSky22/master
week 11 done.
2 parents ff47f60 + a529df9 commit c64e341

File tree

4 files changed

+267
-0
lines changed

4 files changed

+267
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.sky.leetcode;
2+
/**
3+
* @author DuanSky
4+
* @date 2016年3月17日 下午1:12:03
5+
* @content
6+
*/
7+
8+
public class _025_Reverse_Nodes_in_k_Group {
9+
10+
public static void main(String args[]){
11+
_025_Reverse_Nodes_in_k_Group test = new _025_Reverse_Nodes_in_k_Group();
12+
ListNode head = ListNode.generate(new int[]{1,2});
13+
int k = 2;
14+
ListNode t = test.reverseKGroup(head, k);
15+
}
16+
17+
18+
public ListNode reverseKGroup(ListNode head, int k) {
19+
if(head == null || head.next == null) return head; //至少需要两个元素才有翻转的必要
20+
ListNode lastTail = new ListNode(0), res = lastTail,thisNext = null, nextHead = head, curr = head;
21+
while(curr != null){
22+
int counter = 1;
23+
while(nextHead != null && counter < k) { //记录需要反转的链表
24+
nextHead = nextHead.next;
25+
counter ++;
26+
}
27+
ListNode thisHead = curr;
28+
if( nextHead != null && counter == k){ //需要反转
29+
nextHead = nextHead.next;
30+
ListNode thisTail = null;
31+
while(curr!=nextHead){
32+
thisNext = curr.next;
33+
curr.next = thisTail;
34+
thisTail = curr;
35+
curr = thisNext;
36+
}
37+
lastTail.next = thisTail;
38+
lastTail = thisHead;
39+
}else{
40+
lastTail.next = thisHead;
41+
break;
42+
}
43+
}
44+
return res.next;
45+
}
46+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.sky.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
/**
9+
* @author DuanSky
10+
* @date 2016年3月18日 下午9:15:20
11+
* @content
12+
*/
13+
14+
public class _133_Clone_Graph {
15+
16+
public static void main(String args[]){
17+
_133_Clone_Graph test = new _133_Clone_Graph();
18+
UndirectedGraphNode node = new UndirectedGraphNode(0);
19+
node.neighbors.add(node);
20+
node.neighbors.add(node);
21+
test.cloneGraph(node);
22+
}
23+
24+
25+
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node){
26+
if(node == null) return null; //MISTAKE 注意需要考虑为空的情况
27+
return core(node,new HashMap<Integer,UndirectedGraphNode>());
28+
}
29+
30+
public UndirectedGraphNode core(UndirectedGraphNode node, Map<Integer,UndirectedGraphNode> map){
31+
if(map.containsKey(node.label)) return map.get(node.label); //如果之前新建的这样的一个对象,则直接返回这个对象
32+
UndirectedGraphNode copy = new UndirectedGraphNode(node.label);
33+
map.put(copy.label, copy);
34+
List<UndirectedGraphNode> neighbors = node.neighbors;
35+
for(UndirectedGraphNode neighbor : neighbors){
36+
copy.neighbors.add(core(neighbor,map));
37+
}
38+
return copy;
39+
}
40+
41+
//====================================================================================
42+
public UndirectedGraphNode cloneGraph_wrong_answer(UndirectedGraphNode node) {
43+
if(node == null) return null;
44+
List<UndirectedGraphNode> neighbors = node.neighbors;
45+
List<UndirectedGraphNode> copy = new ArrayList<UndirectedGraphNode>();
46+
for(UndirectedGraphNode neighbor : neighbors){
47+
copy.add(cloneGraph_wrong_answer(neighbor)); //MISTAKE 当出现环路的时候,会陷入死循环。
48+
}
49+
UndirectedGraphNode root = new UndirectedGraphNode(node.label);
50+
root.neighbors = copy;
51+
return root;
52+
}
53+
54+
}
55+
56+
class UndirectedGraphNode {
57+
int label;
58+
List<UndirectedGraphNode> neighbors;
59+
UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
60+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.sky.leetcode;
2+
3+
import java.util.LinkedList;
4+
import java.util.Queue;
5+
6+
/**
7+
* @author DuanSky
8+
* @date 2016年3月18日 下午4:07:49
9+
* @content
10+
*/
11+
12+
public class _210_Course_Schedule_II {
13+
14+
public static void main(String args[]){
15+
_210_Course_Schedule_II test = new _210_Course_Schedule_II();
16+
int numCourses = 2;
17+
int[][] prerequisites = {};
18+
int[] res = test.findOrder(numCourses, prerequisites);
19+
}
20+
21+
public int[] findOrder(int numCourses, int[][] prerequisites) {
22+
int[][] matrix = new int[numCourses][numCourses];
23+
int[] indegree = new int[numCourses];
24+
25+
for(int i = 0; i < prerequisites.length; i++){
26+
int from = prerequisites[i][0], to = prerequisites[i][1];
27+
if(matrix[to][from]==0) indegree[from]++;
28+
matrix[to][from] = 1;
29+
}
30+
31+
int counter = -1;
32+
Queue<Integer> queue = new LinkedList<Integer>();
33+
int[] res = new int[numCourses];
34+
35+
for(int i = 0; i < numCourses; i++){
36+
if(indegree[i]==0) queue.add(i);
37+
}
38+
39+
while(!queue.isEmpty()){
40+
counter ++;
41+
int curr = queue.poll();
42+
res[counter] = curr;
43+
for(int i = 0; i < numCourses; i++){
44+
if(matrix[curr][i]==1){
45+
if(--indegree[i]==0){
46+
47+
queue.add(i);
48+
}
49+
}
50+
}
51+
}
52+
return counter+1 == numCourses ? res : new int[0];
53+
}
54+
55+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.sky.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.HashMap;
6+
import java.util.HashSet;
7+
import java.util.LinkedList;
8+
import java.util.List;
9+
import java.util.Map;
10+
import java.util.Set;
11+
12+
/**
13+
* @author DuanSky
14+
* @date 2016年3月16日 下午7:36:01
15+
* @content
16+
*/
17+
18+
public class _336_Palindrome_Pairs {
19+
20+
21+
public static void main(String args[]){
22+
_336_Palindrome_Pairs test = new _336_Palindrome_Pairs();
23+
String s = "abcdefdcba";
24+
String[] words = {"aihhieeegdebhb","acajjajbbibaab","ddjihhebahcead","cehdaiaeaggai","di","bcacdfjadgfjgiicghc","ddhigcdidggfcejib","djbgdcadgiaaieh","fggfdajadcfhajhag","dfahbdjcbgdf","dfbhhdfjdcfefij","fjgbegdifedgf","ffeice","gdgjcaichica","gigjifehagcacggg","ehjgha","ddj","igffdiddgecidcjfj","cca","heeig","cdghidigcgdaeda","jbbachabahheidacd","feahagifaacejg","abdbgidheigfcabffe","ehcbieidgfagijafd","gcji","f","jddgd","ibachgei","eeabadcbiebdchiaha","baejcdeef","cagbjjhaecgi","ijfcfecdccchee","jhiidcdba","dgdibjihcbbhg","fcibbcbbjhhbiiiaag","fggefjgbjdajcbcgjbj","gg","hhadjfeaa","aghbgcjfcdcihfc","bfffcggfeddeajbhafge","dggfafhafc","dcdbhcifbbbgbcaeh","dacacdhbjd","ghhifd","aabifcjhadibhfdjbga","baejceehiagaabchabff","bjagbabf","hgijgdifccjdehjaccbf","gbfejbfddgcja","iiedgaigdg","eeieg","cei","bchicbfcihbcjejjfg","jhjdfi","ebdgaghfbjhfceh","bdjdgegfdddadiieaici","abeecj","g","jcadaigbcabcggeddjcd","h","ajjg","iebcbgfbjhbfbai","ghj","gidafdigfgfcjfg","hgjacihicbcfifghgcbc","gaaibecj","ifjciedfgdegfi","bfcbdddjfjjhfahbjfaa","fafgijfgahf","gcjacdbgdbecghif","gjdgah","fdbbcbidbhbgf","ghihccifb","ghjeecjgfefd","b","egigbdaicefieddicee","gjg","baae","jeiehgccjefedjib","jjcjgeaajcj","ihjbhbjgejgcheb","accce","jhc","gjj","icaadccfihj","bafefdchbhibibdfggg","egehfbegjedcicdfjfge","fbcdighdcieideh","bjfibbjigc","daidhjjb","aeeec","ed","dgdbjjibccjdafh","bbde","biejhahgd","bjhhdiidcbe","dibceifgj","c","hedi","fjjfihdejifjfba","hd","bffbd","gdjaaaaihgbiahicde","gdehfchcd","icgidjcj","gd","jddfjhcgiefjee","daajiighijhdfbi","bggj","ecgfbahaacfiajc","ggdffajibaidjib","jf","fhicadfghdcchiiifj","aji","gfjacgcfbicgdjad","cfhfcggadigidigihdid","bfcdidiifgfbc","ahiidhjhbfdiahic","edecdcd","cigigjfafdbhbdhhhjf","fbjefgghghcheja","dhcheddfjffeejb","ffcd","ificcdfdb","ghjgafhiffdcgghjja","jgfadaecjgh","fifahiijidjgcdiedee","dccejgdfaggdadfccd","aeghbjdjgifah","gejaehchdfhfdeegie","bafa","aebgccebdfcgc","abdgbcg","dcedgfjbbgc","jbfhaddbbdaiiegjic","jegdijdaebj","ejgajggidiahadgddeab","ece","i","hegjjfbgegijdjgb","aiiee","eefad","cdbeifbfa","afej","hagaadb","egfdib","hfaiididcidfjccf","debf","ddhceh","hjgecgjjihf","fjjfj","gjceffcedjff","aaaghiabbdagbchhg","dgaieejgbfjdhcbcijfa","cacf","cbjbijehadihhjdi","fiabgiiccbba","eagi","edaagghhehgddic","egcaghjcfci","cjbhgfbdfddh","jbjdhghgjjjacgidfbeg","icjihhgeffbhihhdh","caceeibgbihcfidbig","efij","ahjgfdegbig","cieifgigjdbje","iebahhbjjbjiegaca","bjiheaiaacajdjbdbe","gbgbcdge","bdaijhgefjibfhcedc","gjgfbhhdedhb","hedbgdbajfg","eiebdiiedhagad","a","digcdgjejhf","aaiafddgcefj","dhba","d","ag","bbchdccbgjfbjcgfci","afg","cbjgjfffj","ccgifgeccjgc","jhbgb","dfggiifehbf","hfhedbgjdhfghgdja","fagjbdge","cejhjbccgjggihcgeaf","dbhbfebffgaf","cdhdjhcj","hacjbaifjb","gjejjbbbecidahjched","jadfiigjidfgfa","efjggaebaa","heieaihfffj","ejeafadace","jfajijdifijacbhjc","fig","cehegedcdjcijehaeac","dgjeijfae","dcbeddfdb","gdd","ad","eafdbedfdgeiiif","dagihgebabiahhaf","fiifhdbfhhbb","dfc","eajigcfifjjdhdhjadf","egccbbhgddggebehebhc","debahdfadag","fhhcedjachdcjhd","iaaicjbgejjaihcdaab","jggbiee","gigdjccjficebidhjdcj","fa","aehaghjbfibcd","ceiicfbfgccbfjbi","ieheijg","bhcffafei","ahhihfjja","bdiihbciicfbhead","bebihe","dedigbeddahabdfa","dcehfcbhibiihhg","bdbdaifcbediabebhee","ghbgecjcidafbgfad","bfiaafcbdijj","jffeijjijcbeihgbccfj","fafbbjgagjbdd","jcejgd","dffgjfdibfabjgddcb","acdhaebbiiacffgcdj","ifibah","fighebjccg","jehejgdgiddebehfhdba","ffebafcaafcgadfjai","icjcdgachddebbbhj","hcchjbecfigah","cdjfffgafhie","fedaejjeedahhccg","gdedhijcjh","aaccbgifg","dibffhffigaeegfg","ba","hg","efa","acifijeg","cichjibjdhgajcdc","ccejgejcgabafgb","dhfi","cdgdfcfbhaefbdddh","aebdjf","fdghbigifah","jeegcicbfejc","bebehc","dgfgdhg","jjfbifgfj","gejbebejbfhb","ghfhheeaddc","iedah","hfjchb","hjhdfbjfigdbgbgggf","ebfiecdghcfg","eheiicbhiedi","fjaa","ccbeheejcicahhhj","ebbjbd","hafebbhfgdjbde","aibjfcfe","jbbdbjac","ghdaec","gbabhj","e","fcbjgibadfcdbd","afahbhjjbad","adadeiibjgchihgcdfjh","dgadgfji","ecidcfhajhdfcf","dfeeebggedhfidede","cadejafjaajaicd","ibd","dagf","eigfajhfgdcbhi","ce","jdbgiefed","bgffchfeebhejgh","fj","geddhdghcb","jcabjacjhbiejjaehih","gfchcjceadifii","cgjjaai","jicfgjciciihagd","agcheaeahddheje","jaaiehdhfhcbg","ciafhfadeahiedgac","fdecghgehfdigfa","hajffedb","hcjefhfeggbaafgcheh","fdddcdchbhjgfig","aghggjdcbehgccd","ehfdj","gbbgdb","cdgjifidcdiejfga","gbjdi","fegicbfdhbdeicdac","ijfbegfdjcbjcaddbcgg","hihfjdadifh","fdccdcdchdh","ciciaejifbeefcciigb","afcccc","jfci","fccje","fd","ebbgfdi","bdcig","ehbaji","cbdjiffgfagagjbaid","bejhcgdcaeaaibibca","fhigfbfddfbai","cgbadcgdchia","jh","aahjbj","fddfahebabfajafgceb","cbficcbhadchedcidg","iihjdaedbb","bbigheagfee","ffggehgfificifdejga","acidhghj","bbbggfegjh","bfcbhdied","bejadihbdjid","ajhfgjehaaabb","fhgjjedajhb","jejghcjfbgda","ef","jdcahjiahgfejaacc","fjacgcjjfeb","ggefjf","jfejaah","fbgfhefcegcbbihf","igefidejfgdefjeg","beaecfgjcda","dffccaecieicbcgheeeh","hbfaebjdi","eddgcfjhbh","ieheecbefgjhcjficb","ia","iibfefchhdei","fjdcdccaefi","gebcjejihhdjjbf","jgee","fc","gdfaejbfbgeffffibb","iciabibhihfcejdjggba","bcfhfafj","cchgaibghghjifehgdac","gheheg","fddbc","jfebecgifdajh","bjichcbbdhg","eaeaaadc","febhcc","dba","bafchg","cbjbghgfjij","ae","cihijabjhd","abjb","ijiagdeh","cjhdbbgdfh","ffdgagecchicae","iii","iiejcideejjifiia","dcb","cgjc","eeddie","jedbfgdb","bjiadfef","fddjiejeghhafhjefb","ebdfbfdbgdhcdjddigj","hgiffaigdgehfdb","geggc","beiiagf","gfbhjej","jagadabjcgiceija","gghidjhaeficjej","eibggjgccfbhcad","hhijjeaebbg","chddicbchb","iifgcbed","ehcfbjaeahfbbdjgf","idcdaajf","ch","aigigiehdbiehh","egacbfbejh","chhchhdfccagdidhed","bceefjjjhhjdbj","fgjdcigjaabiccfba","bjhddhjjbbiajbchia","fjbicdcgffadhgbdc","gbgba","ajjdffgegahf","cbjfeeja","egfjbfgghjeaeaaeiej","edhgdgjgfiddfjddd","hc","dhaffehdh","abaca","fdfiajaehcddi","ebddcj","dejh","jjfigabh","bgiijbecafcag","dfffjdabhegej","fgjdjdcjhcidjgbhb","adgaca","jbadfgjfd","ggbdbehbdbjbjif","dbibg","ifdgaihcaaif","hfcicghddi","dfgieidbddhcdbcc","cg","ecajej","cegigiaejcbddgef","j","bbddbjebeccgjbbbifeg","dgffdedej","bcffhigji","bacgeah","cehfdaebaagjecfbfjeh","ffdjbfjigfejheacec","bhicaf","feifehchcf","eh","cc","fgebehacgggaafecahbi","jdjdeg","ceiegifagjdig","egjf","ichajgibiijbffhgjd","hehjhhgjecihiaeh","jjbfbjjgdjijhdefhe","ieijjbabdiggbej","jhggbgcbajigebb","bb","ciigfdigbajfjaajghh","eai","eaggcf","jeefebecid","fhaifhfiiighdgdgicf","fcj","iifd","gbgcaefcf","jjddcjfdchcdchce","ee","hiffa","dcfda","ijcfbbfbae","hcbdhhg","aheifdcjdgbccccjgadc","ecjabjjbdefgjbbhj","bfdjjcfbdfdcef","icjfheiee","hecff","hccccjdgeafdjeebabca","gibiafaihd","idbaahbddg","iieigidefdbddjc","bcahbdifgjcfahcdfea","djadjjgaebcg","idjaeegcc","beehcdcb","ehbfdhffaa","djjff","igacfgdbjiedffia","hdgabjaefahhcibiba","bca","eehfjb","iibfigca","gifgcaafddebajaedjdg","ai","ijgbjcjj","ifdjjjfcabhijjgc","hh","ecfijbhfcajbfc","iifcdifc","ehf","hjfedgdbcdcif","ihhedgbedddegebcfi","gc","cfj","eicigiaacghhfgch","fjcdjadd","idihdhjbfgdjeg","fddbdfigfbgchdcaaehc","cgdfef","idicdcbihehdcdi","bceibi","ifehjcfbihjefaabhcc","ieegghfahacidc","adbicied","ghbcdegb","jeijjbbfgcdgjied","geaad","ajjbccgbifcdggafc","accddbbhjcbhe","fbfb","jifgjhaadchj","hgjhdifeiji","gcjaddjjdgchdbcigch","dghgehia","jdiab","fbad","ebgiaabdbdehjce","hahehbifa","heigfcjigjabhaiedb","cjjc","ffhjbhahegji","bihddjfdbhhigcf","djccffcfjfcdbedcj","jcfbhifieihfibgbbe","jdbgiebfgch","hgfgaibcabf","idbaiaeadficihfd","hihjaadeebegcbddi","cdhahbjgjaifideb","ecficjfgc","dehjdf","fffe","ffeghcihcfab","ahdbee","gfccgc","ahbffbiah","ccg","ecicgiddgebfgcdgi","bc","dbhggffhdbjhhab","idjiijfgi","afch","hcghdedadhhchhjafcji","eaigidgj","bbgb","bghibhjaahcebgf","fjjffj","deaaaaeeheaecj","icjjcdijghgcg","chjh","jgcaahhbdjadfgjcg","gfafjdgh","fdggghejhh","hahhjfidghfbcfjgji","ejg","bjachejdcfjc","ibbbcgdbj","hjjhccggidaie","iiaehchic","jgheggigbbfa","afgieeeafaiaiccaag","eejjfbihhiegbbbgfeh","fjdbcaijfjc","igeedcfegceaajbe","aafjhaeahbedcf","agbcbeifeahh","fafjajddaabefcjdcff","aajfahafedejifaga","hbag","ca","bffdfecaebaghccfbdej","id","cdbbihchhebfi","cjaihigib","bfahhjjjabdeeeje","bhcagbgc","ejjfhebejadiidehdcgb","ecigdhfifbjch","jgagf","bhjdaejfbgjc","hbjfiediiajbej","cjgd","acejgdhecef","jhjdbi","ijidbeaaheaiahjcfcd","gjdfjgcechcjc","bfidjacdhegegibhh","egbefbdbicbid","biga","igebachebcjcecge","dbfciciahgfebecb","ffaig","ebcdeaciibfjefb","hcaibiidejh","hbfebahiid","ffgehig","dfcgidibacf","efdjbchgaihf","abjjhfcah","ijjbeibhedhi"};
25+
System.out.println(test.palindromePairs_1(words));
26+
}
27+
28+
//my solution.
29+
public List<List<Integer>> palindromePairs_1(String[] words) {
30+
List<List<Integer>> res = new LinkedList<>();
31+
if (words == null) return res;
32+
Map<String,Integer> map = new HashMap<>();
33+
for(int i = 0; i < words.length; i ++) map.put(words[i], i);
34+
for(int i = 0; i < words.length; i ++){
35+
int l = 0, r = 0; // l 和 r 分别是左边界和右边界,这两个值只有一个为0,不可能同时为0。l为0时,是固定左边部分
36+
while(l <= r){ //需要循环取出所有的情况
37+
String s = words[i].substring(l,r);
38+
Integer j = map.get(new StringBuilder(s).reverse().toString()); //MISTAKE 注意这里需要反转
39+
if(j!=null && i!=j && isPalindrome(words[i].substring(l == 0 ? r : 0, l == 0 ? words[i].length() : l))) //MISTAKE 注意这里需要考虑i!=j,因为不能自己跟自己组成回文
40+
res.add(Arrays.asList(l == 0 ? new Integer[]{i,j} : new Integer[]{j,i}));
41+
if(r < words[i].length()) r++; //r先加到右边界
42+
else l++; //l在加到左边界
43+
}
44+
}
45+
return res;
46+
}
47+
48+
//beautiful solution.
49+
public List<List<Integer>> palindromePairs_(String[] words) {
50+
List<List<Integer>> pairs = new LinkedList<>();
51+
if (words == null) return pairs;
52+
HashMap<String, Integer> map = new HashMap<>();
53+
for (int i = 0; i < words.length; ++ i) map.put(words[i], i);
54+
for (int i = 0; i < words.length; ++ i) {
55+
int l = 0, r = 0;
56+
while (l <= r) {
57+
String s = words[i].substring(l, r);
58+
Integer j = map.get(new StringBuilder(s).reverse().toString());
59+
if (j != null && i != j && isPalindrome(words[i].substring(l == 0 ? r : 0, l == 0 ? words[i].length() : l)))
60+
pairs.add(Arrays.asList(l == 0 ? new Integer[]{i, j} : new Integer[]{j, i}));
61+
if (r < words[i].length()) ++r;
62+
else ++l;
63+
}
64+
}
65+
return pairs;
66+
}
67+
68+
//暴力检测 68ms 未通过
69+
public List<List<Integer>> palindromePairs(String[] words) {
70+
List<List<Integer>> res = new ArrayList<>();
71+
for(int i = 0; i < words.length; i++){
72+
for(int j = i + 1; j < words.length; j++){
73+
if(!canMakePalindrome(words[i]+words[j])) continue;
74+
if(isPalindrome(words[i]+words[j]))
75+
res.add(Arrays.asList(new Integer[]{i,j}));
76+
if(isPalindrome(words[j]+words[i]))
77+
res.add(Arrays.asList(new Integer[]{j,i}));
78+
}
79+
}
80+
return res;
81+
}
82+
83+
//判断一个字符串是否可以构成回文
84+
private boolean isPalindrome(String s) {
85+
if(s == null || s.length() < 2) return true;
86+
int i = 0, j = s.length()-1;
87+
while(i<j){
88+
if(s.charAt(i)!=s.charAt(j)) return false;
89+
i++; j--;
90+
}
91+
return true;
92+
}
93+
94+
//判断原字符串是否可以通过改变元素顺序构成回文
95+
public boolean canMakePalindrome(String s){
96+
if(s==null || s.length()<2) return true;
97+
Set<Character> set = new HashSet<Character>();
98+
for(int i = 0; i < s.length(); i++){
99+
char a = s.charAt(i);
100+
if(set.contains(a)) set.remove(a);
101+
else set.add(a);
102+
}
103+
return set.size()<=1;
104+
}
105+
106+
}

0 commit comments

Comments
 (0)