在Python中查找从起点到终点的字典顺序最小的字符串的程序
假设我们正在笛卡尔平面上的(0,0)位置。我们只能使用水平(H)和垂直(V)单元的移动来到点(x,y)。有多种可能的方法到达目的地,每种方法都由几个H移动和几个V移动组成。(例如,如果我们要从点 (0,0)到点(2,2),那么HVVH是可能的一种方式。)如果我们有另一个值k,我们必须找到到目的地的字典顺序第k小的方式。
因此,如果输入像(x,y)=(3,3) k=3,那么输出将是“HHVVVH”
为了解决这个问题,我们将执行以下步骤 –
- 定义一个名为paths()的函数。这将输入x,y
- 如果min(x,y)<0,则
- 返回0
- 返回factorial(x+y)/factorial(x)/factorial(y)
- 从主方法开始,执行以下操作 –
- res:一个新列表
- (p, q):(0, 0)
- while(p,q)不等于(x,y),执行以下操作
- n:paths(x-p-1,y-q)
- 如果p+1≤x且k<n,则
- 在res末尾插入‘H’
- p:=p+1
- 否则,
- k:=k-n
- 在res末尾插入‘V’
- q:=q+1
- 返回连接后的res字符
示例
让我们看一下以下的实现,以更好地理解 –