我知道的算法如下,但为什么我讨厌这种方法,它的时间复杂度是O((n + 1)!)在大字符串的情况下更糟糕
首先对字符串进行排序并将其打印为第一个排列.
现在,我们可以找到下一个排列如下:让我成为输入[i] <input [i + 1]的最后一个索引.如果没有这样的索引,那么我们就完成了.令j为输入[i] <input [j]的最后一个索引.用输入[j]交换输入[i].通过输入[input.length - 1]反向输入[i + 1].
有没有比上面更好的方法?(如果通过代码解释那么请考虑c或c ++)...只是我期待一个更好的算法,时间复杂度比上面的更少
我无法理解下面代码的输出是如何"-3"的?
#include <stdio.h>
void main()
{
int a = -5;
int k = (a++, ++a);
printf("%d\n", k);
}
Run Code Online (Sandbox Code Playgroud)
int k = (a++, ++a);在c或c ++中这个陈述背后的概念是什么 ?