本帖最后由 cczcseiya423 于 2011-05-30 11:32:28 编辑

解决方案 »

  1.   

    http://blog.csdn.net/afunx/archive/2011/06/01/6458770.aspx
      

  2.   

    例如arr:1,2,3,4
    先是getSequence(arr,0,4),若进入stack的是2,则swap后arr变为:2,1,3,4
    然后getSequence(arr,1,3),若取出的是3,zeswap后arr变为:2,3,1,4
    就这样一直运算下去,当调用getSequence(arr,4,0)时,即num==0时,一个排列已经完成了,所以统计j++要加一了。
    之所以在每次调用getSequence()之后都要再次调用swap将之前swap的两元素交换回来是为了保证每次寻找下一个排列的时候arr中元素排列顺序都与最初的相同,否则的话arr的元素排列就不再是1,2,3,4这样的顺序了。
    不知道我的的表达是不是清楚,不过还是要跟LZ说一句:这段代码是我在这个论坛里看过的注释最详细的代码了,而且也没涉及到很难的东东(以我这个初学者的眼光来看),LZ需要反省一下自己了