洗牌算法:对52张牌洗牌,要求尽量洗乱,而且原牌不能在原位置上重复

张开发
2026/4/17 13:29:39 15 分钟阅读

分享文章

洗牌算法:对52张牌洗牌,要求尽量洗乱,而且原牌不能在原位置上重复
目录这题本质上是:生成一个 52 张牌的随机错排(Derangement)最推荐方案一、思路二、为什么这个方案靠谱三、JavaScript 实现1. Fisher-Yates 洗牌2. 判断是否为错排3. 生成 52 张牌的错排洗牌4. 使用示例四、完整可直接运行版本五、时间复杂度六、不要直接用 Sattolo 算法当标准答案Sattolo 代码长这样:七、如果面试官问“怎么回答”八、如果你想要“只洗一次、不重试”的版本九、一句话总结这题本质上是:生成一个 52 张牌的随机错排(Derangement)要求有两个:尽量洗乱= 要保证随机性好,最好接近“所有合法结果等概率”原牌不能还在原位置= 不能出现cards[i] === original[i]

更多文章