2016-03-29 26 views
-1

benzersiz her basamağı ile 9 basamaklı sayıları üretmek için çalışıyorum. vb Örneğin, 123456789, 132456789, 987654321 için .... Ben bu soruyu çözmek zorunda böyle kazandığını düşünüyoruz çünkü ben özyineleme ile bu soruyu etiketli nedendir ama nasıl emin değilim JavaBen <strong>1 hiçbir tekrarlar tam bir kez kullanılan</strong> 9'a her rakam ile 9 haneli sayıların <strong>tüm</strong> permütasyon üretmek çalışıyorum Java

o

Program, int dizilerinin bir listesini döndürmelidir.

List<int[]> list = new ArrayList<int[]>(); 
int[] values = {1,2,3,4,5,6,7,8,9}; 
int count=0; 
int count2=0; 
int count3=1; 

while(count2<9*8*7*6*5*4*3*2) { 
    for(int i =1;i<values.length-1;i++) { 
     if (count<8*7*6*5*4*3*2) { 
      Integer toMove = values[i]; 
      values[i]=values[i+1]; 
      values[i+1]=toMove; 
      count++; 
     } else if (count>=8*7*6*5*4*3*2&&count3<9) { 
      values[0]=1; 
      values[1]=2; 
      values[2]=3; 
      values[3]=4; 
      values[4]=5; 
      values[5]=6; 
      values[6]=7; 
      values[7]=8; 
      values[8]=9; 
      Integer toMove = values[0]; 
      values[0]=values[count3]; 
      values[count3]=toMove; 
      count=1; 
      count3++; 
      i=0; 
     } 

     count2++; 
     list.add(values); 
    } 
+0

Sen özyineleme ile bu soruyu etiketledi aradığını, ancak senin örneğin yinelemeli bir algoritma değildir. Olması gerekiyor mu? Ve kaç yinelemeyi istediğinizden emin misiniz (9!)? – KevinO

+0

Permütasyonlar oluşturmak ister misiniz? Vikipedi bunu yapmak için bazı algoritmalar açıklar. https://en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order – SpiderPig

+0

Tüm permütasyonları ya da 0-9'luk birer birer birer birer görünen 9 rakamı bir avuç almaya çalışıyor musunuz? İkincisi ise, sadece bir rakam dizisi oluşturun ve karıştırın. – pjs

cevap

0

Umut bu

//Initialize List 
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); 

//Shuffle List  
Collections.shuffle(numbers); 

//Obtain Array 
Integer randomizedArray[] = numbers.toArray(new Integer[0]); 

//Print Array 
System.out.println(Arrays.toString(randomizedArray)); 
+0

Sadece bir değil, tüm permütasyonları bulmaya çalışıyorum, bu yüzden bu yöntem işe yaramaz ve ben sadece bu diziyi defalarca randomize edersem aynı olan bazı dizileri alırdım ve bunu istemiyorum –

+0

Mantık karışık çalma ve dizi oluşturma, bir yönteme dönüştürülebilir ve tekrar tekrar denir. Sayıların rasgele \t shuffle (Liste listesi, Rastgele rnd) – tmokha

+0

yoluyla elde edilebilir, ancak rastgele yöntem aynı diziyi bir kereden fazla tutabilir ve her permütasyona ihtiyacım var –