突然间想收集一下LeetCode的一些沙雕解法,求给位大大贡献一些。
ACCEPTED是必须的,最好让人家觉得挖槽还可以这样的。
https://github.com/extremania/leetcode-wtf
举个栗子,
#4 求寻找两个有序数组的中位数 [hard]
最优解法是O(log(min(m, n))),但是4行代码O(m+n)+O(log(m+n))就干掉80%
int[] nums = Arrays.copyOf(nums1, nums1.length + nums2.length);
System.arraycopy(nums2,0, nums, nums1.length, nums2.length);
Arrays.sort(nums);
return (nums.length & 1) ==1 ? nums[ nums.length / 2] : (nums[ nums.length / 2 - 1] + nums[ nums.length / 2]) / 2.0;
#10 正则表达式匹配 [hard]
用java内置API一行搞定。。。
return s.matches(p);
#326 Power of Three [easy]
求3的幂
1162261467 = 3^19, 3^20 暴了int
return n>0 && 1162261467%n==0;
#65 Valid Number [hard]
判断一个字符串是否是合法数字
try-catch 大法好
try{
return Float.parseFloat(s.trim()+"f")==0f || true;
}catch(Exception e){
return false;
}
#52 N-Queens II [hard]
谁叫你测试用例太少
return Arrays.asList(1, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184, 14772512, 95815104, 666090624).get(n);
#1025 Divisor Game [easy]
周♂皆♂轮 和 佟♂DARK♂为 在完游戏,皆♂轮 先玩。
一开始有N个数字,每个玩家轮流玩一次,玩家可以:
选择一个数x,0 < x < N 并且 N % x == 0。
将N替换成N - x。
如果玩家不能行动则算输。
返回True如果皆♂轮可以赢了这场游戏。假设两位玩家都选择最优行动。
return N%2==0;
#319 鬼畜灯泡开关[medium]
初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。
return (int) Math.sqrt(n);
#297 Serialize and Deserialize Binary Tree
#428 Serialize and Deserialize N-ary Tree
#449 Serialize and Deserialize BST
序列化,反序列化各种树。看完陷入沉思。。。。。。
public class Codec {
TreeNode root;
public String serialize(TreeNode root) {
this.root = root;
return "";
}
public TreeNode deserialize(String data) {
return root;
}
}