首页 > 解决方案 > 一系列彩色球的排列,没有两个相同颜色的球相邻?

问题描述

输入是一个字符串 (a, b, c, d,...)。在这个字符串中,a 表示相同颜色的 a 球,b 表示另一种颜色的 b 球,依此类推。所以 (2, 1, 3) 表示 2 个红球,1 个蓝球和 3 个黄球。

输出 1 是可能排列的数量,没有 2 个相同颜色的球相邻。

输出 2 是所有这些排列的列表。

例如:

输入: (2, 1, 3)

输出 1:10 个排列

输出2:131323、132313、231313、312313、313123等。

所以我的主要问题是:如何过滤Python程序中两个或多个相同颜色的球彼此相邻的排列?

标签: pythonpermutation

解决方案


以下代码将解决您的问题:

import numpy as np
num = 221333 ## Any random permutation
lst = list(map(int, str(num)))
req_array = np.diff(lst)
if 0 in req_array:
    print ("Yes")

上面的代码在以下逻辑中工作:

  1. 一个一个地迭代你的排列列表。上面的代码适用于该列表中的 1 个此类元素
  2. 转换numberarray
  3. 减去连续元素
  4. 如果数组为零,则存在一种组合,其中 2 个球的颜色相同

推荐阅读