五种方法实现全排列之方法五
javascript吧
全部回复
仅看楼主
level 12
microroom 楼主
<script>
//栈+标记
function pailie5()
{
let arr=[1,2,3];
const len=arr.length;
//[0,0]表示排列的第一个元素从数组下标为0的元素开始探测
let st=[[0,0]],selected=arr.map(_=>false),i,r=[];
let total=0;
while(st.length>0)
{
[n,i]=st.pop();
if(i>0)
selected[i-1]=false;
for(;i<len;)
{
if(selected[i]==false)
{
//排列的第n+1个元素这次选择数组下标为i的元素
r[n]=arr[i];
if(n==len-1)
{
total++;
document.write(`${r}<br />`);
i++;
}
else
{
//将数组下标为i的元素设置为已选
selected[i]=true;
//排列的第n+1个元素下次从数组下标为i+1的元素开始探测
st.push([n,i+1]);
//排列的下一个元素从数组下标为0的元素开始探测
n++;
i=0;
}
}
else
{
i++;
}
}
}
document.write(`total5=${total}<br /><br />`);
}
pailie5();
</script>
2023年02月23日 13点02分 1
1