piapia123
zh

字符串排列与组合

文本

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

全排列、取 k 个的组合、左右旋转、笛卡尔积,四种模式一个工具。最要紧的一条是先算数量再生成:`abcdefghij` 的全排列是 3628800 条,先生成再判断上限的话,页面会在用户还没反应过来时卡死 —— 所以超过上限直接报错,并告诉你要多少条。 重复字符会去重:`aab` 的全排列是 3 条(`aab`/`aba`/`baa`)而不是 6 条。笛卡尔积模式里,逗号分开的每一段,其字符各成一组(`ab,12` 得到 `a1 a2 b1 b2`)。 全部在浏览器里计算,不联网、不上传。

功能

  • 五种模式:全排列、组合(取 k 个)、左旋转、右旋转、笛卡尔积
  • ⚠️ 先算精确条数再决定是否生成,超上限报错而不是静默截断
  • 重复字符去重:aab 的全排列是 3 条而不是 6 条
  • 组合用生成函数系数精确计数,重复字符也不虚报
  • 可选择生成顺序或按字典序排序输出
  • 给出结果总条数与当前上限
  • 按码点处理,emoji 不会被拆坏

使用方法

  1. 输入一段文本(只取第一行)
  2. 选择模式;组合模式再设 k
  3. 按需要调整去重、顺序与上限
  4. 结果列表与总数立刻出现

常见问题

为什么超上限要报错,而不是给前 1000 条?
因为静默截断会让人以为「就这么多」。排列数是阶乘级增长的,少给的那些往往正是你要找的;报错并告诉你需要多少条,才是诚实的做法。
重复字符是怎么去重的?
生成时按「每个字符还剩几个」回溯,而不是交换位置,所以两个相同的 a 换位置不会被当成两个结果。`aab` 因此是 3 条。
笛卡尔积怎么输入?
用逗号分隔每组,每组的字符构成一个集合。例如 `ab,12` 会得到 a1、a2、b1、b2 四条。
数据会上传吗?
不会。全部在浏览器内存里计算,不发送任何请求,断网也能用。

相关工具