leetcode 150道题 计划花两个月时候刷完,今天(第四十一天)完成了2道(82-83)150:
82.(133. 克隆图)题目描述:
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node {public int val;public List<Node> neighbors;
}
第一版(这个之前有过是拷贝二叉树的时候和这个类似,利用map 映射就是当前节点和当前节点的复制节点)
class Solution {Map<Node,Node> map=new HashMap();public Node cloneGraph(Node node) {if(node==null){return null;}if(map.containsKey(node)){return map.get(node);}Node cloneNode= new Node(node.val);map.put(node,cloneNode);for(Node neighbor:node.neighbors){cloneNode.neighbors.add(cloneGraph(neighbor));}return map.get(node);}
}
第83题顺序应该是 leetcode 的 《399. 除法求值》但是实在是看不懂,找了一个类似的比这个简单的,但是还是看不懂,只是把解题的代码默写了一遍。。
83.(990. 等式方程的可满足性)题目描述:
给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:"a==b" 或 "a!=b"。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。
只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。
第一版(解题默写版)
class Solution {public boolean equationsPossible(String[] equations) {// 26 字母全部创建为节点int[] nodes=new int[26];// 将初始化节点的父节点设置为自己for(int i=0;i<26;i++){nodes[i]=i;}// 先遍历相等的,建立关系for(String equation:equations){char[] chars=equation.toCharArray();if(chars[1]=='='){int index1=chars[0]-'a';int index2=chars[3]-'a';union(nodes,index1,index2);}}// 再遍历不相等的看是否冲突for(String equation:equations){char[] chars=equation.toCharArray();if(chars[1]=='!'){int index1=chars[0]-'a';int index2=chars[3]-'a';if(find(nodes,index1)==find(nodes,index2)){return false;}}}return true;}// 合并节点,将第一个的父节点指向第二个public void union(int[] nodes,int index1,int index2){nodes[find(nodes,index1)]=find(nodes,index2);}// 查找对应节点的父节点public int find(int[] nodes,int index){while(nodes[index]!=index){nodes[index]=nodes[nodes[index]];index=nodes[index];}return index;}
}
图这一块也太难了。。。。好折磨,就这个 83 《399. 除法求值》卡了我 好几天,每天一打开一看。。还是不会太打击人了。。明天开始,我准备把图这一块的先跳过去。。
加油,这几天真的太打击人了,但是今天leetcode 周赛我做出来了两道,哈哈哈进步了。
早日跳槽!!!