这是我发现的排序词典排列的分步过程:
取先前打印的排列并找到其中最右边的字符,该字符小于其下一个字符。让我们称这个字符为“第一个字符”。
现在找到“第一个字符”的天花板。天花板是“第一个字符”右侧的最小字符,大于“第一个字符”。让我们将 ceil 字符称为“第二个字符”。
交换上述 2 个步骤中找到的两个字符。
在“第一个字符”的原始索引之后对子字符串进行排序(按非递减顺序)。
资料来源:http ://www.geeksforgeeks.org/lexicographic-permutations-of-string/
我已经为它编写了我的伪代码,并且现在也将开始对其进行编程。我了解算法中发生了什么,但我不确定它为什么会起作用。就像第 2 步一样,为什么天花板字符必须是“'第一个字符'右侧的最小字符,大于'第一个字符'”。我知道如果你不这样做,它就不起作用,但我不明白为什么当你这样做时它会起作用。
如果有人可以向我解释为什么你需要算法中的每一步,那就太好了,它会让我在开始我的代码时更加自在。
编辑:我应该提到我理解为什么你将子字符串重新排列为升序,以找到最小的置换,我不明白的是步骤 1 和 2 关于你为什么交换天花板和第一个字符