LeetCode的一些沙雕解法

本文收集了一些LeetCode上的趣味性和创意性极强的解题方法,这些解法虽然可能不是最优,但绝对令人眼前一亮。从简单的数组操作到复杂的正则表达式匹配,再到巧妙利用内置API解决问题,每一道题目都展现了程序员们的无限创意。

突然间想收集一下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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值