给定一个数字N 实现1~N的所有全排列

刚开始是想写个递归的,结果给写成迭代了。后来发现可以写的很简单。。。

class A(object):
 tree = []
 seq=""
 def buildtree(self):
    n1 = [1,'f']
    n2 = [2,'f']
    n3 = [3,'f']
    n4 = [4,'f']
    self.tree = [n1,n2,n3,n4]
                                                               
                                                            
 def dfs( self):
    t=self.tree
    if( type(t) is int):
        print t
    else:
        for e in t:
         if e[1]=='f':
           self.seq =  self.seq +str(e[0])
           e[1]='t'
           self.dfs()
           print  self.seq
           self.seq= self.seq[0:len( self.seq)-1]
           e[1]='f'
           print('')
a=A()
a.buildtree()
a.dfs()



这里用python 实现 递归函数

class A(object):
 tree = []
 seq=""
 def buildtree(self):
    n1 = [1,[],'f']
    n2 = [2,[],'f']
    n3 = [3,[],'f']
    n4 = [4,[],'f']
    n1[1]=[n2,n3,n4]
    n2[1]=[n1,n3,n4]
    n3[1]=[n1,n2,n4]
    n4[1]=[n1,n2,n3]
    self.tree = [n1,n2,n3,n4]
                                                                                              
                                                                                           
 def dfs( self,t):
                                                                                              
    if( type(t) is int):
        print t
    else:
        for e in t:
         if e[2]=='f':
           self.seq =  self.seq +str(e[0])
           e[2]='t'
           if type(e[1]) == list:
            self.dfs(e[1])
           print  self.seq
           self.seq= self.seq[0:len( self.seq)-1]
           e[2]='f'
           print('')
a=A()
a.buildtree()
a.dfs(a.tree)

附上java的迭代算法 发现要实现迭代需要一个全局变量或者类中的公共成员 以及需要递归函数的格式,注意只是格式,而且就这个例子观测,函数时无参数的。上面的迭代的python实现也是

import java.util.ArrayList;
import java.util.List;
public class Dfs {
    /**
     * @param args
     */
    static ArrayList<node> mapList = new ArrayList<node>();
    static String seq="";
    public class node{
        String val;
      
        boolean Looked;
           
        node(String val){
            this.val = val;
            this.Looked = false;
      
        }
      
      
        }
      
      
    public void buildMap(){
          
        node n1 = new node("1");
        node n2 = new node("2");
        node n3 = new node("3");
        node n4 = new node("4");
      
        mapList.add(n1);
        mapList.add(n2);
        mapList.add(n3);
        mapList.add(n4);
          
    }
    public void travel(){
        for( node each:mapList)
        if( each.Looked == false)
            {   each.Looked = true;
                seq+=each.val;
                System.out.println(seq);
               this.travel();
                  
                  seq=seq.substring(0, seq.length()-1);
                  
                each.Looked = false;
            }
          
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Dfs dfs = new Dfs();
        dfs.buildMap();
        dfs.travel();
    }
}