2010-03-06 4 views
4

그 때 이런 물건을하려고 할 때 나는 정말로 대학에 갈 필요가 있다는 것을 깨닫습니다!(Java) 배열에서 가능한 모든 쌍을 찾으십시오

어쨌든 나는 문자열 (275) 배열을 가지고 있으며, 루프를 거쳐 가능한 모든 쌍의 문자열을 자바로 작성해야합니다.

저는 재귀에 대해 배우려고했지만이 문제에 대한 답을 찾을 수 없습니다.

감사

+1

재귀가 필요한 이유는 무엇입니까? 두번의 for 문이 트릭을 수행합니다. –

+0

'[a, b, c]'배열이 주어지면,'[ab, ac, ba, bc, ca, cb]'를 만들고 싶습니까? 아니면'ab'와'ba'가 같은 것입니까? –

+0

ab와 ba는 동일합니다 – user169743

답변

9

abba가 DIF 있습니다

for i=0 to array.length 
    for j=0 to array.length 
    if i == j skip 
    else construct pair array[i], array[j] 

을하고하지 않을 경우 같은 것을 할 : ferent는 어떻게 내가 배열을 가정하고

for i=0 to array.length-1 
    for j=i+1 to array.length 
    construct pair array[i], array[j] 

참고 고유의 문자열을 보유!

+3

안녕하세요. . 나는 똑같은 필요가있다 ..하지만 나는 큰 배열 (10^9의 크기로 말하자면 ..)을 응답한다. 그것은 응답하는데 오랜 시간이 걸린다. 어떤 최적화 된 방법이 있는가? – Jeevi

+0

여기서 볼 수있는 가능한 최적화 (첫 번째 경우)는 if 테스트를 제거하고 루프 이후에'i == j'가있는 n 개의 추가 객체를 제거하는 것입니다 (선택한 데이터 구조로이 작업을 수행 할 수있는 경우) . 이렇게하면'n^2' 번 i == j 검사를 수행 할 필요가 없습니다. 하지만 JVM은 이미이 방법을 좀 더 최적화하고 있습니다. 그런 다음 멀티 스레딩이나 클라우드 컴퓨팅을 사용할 수 있다면 여러 스레드/서버에 루프를 분할 할 수 있습니다 –

1

그것은 간단한 더블 루프입니다 :

for(int x = 0; x < 275; x++) { 
    final String first = arrayOfStrings[x]; 
    for(int y = 0; y < 275; y++) { 
     if(y == x) continue; // will properly increase y 
     final String second = arrayOfStrings[y]; 
     // TODO: do stuff with first and second. 
    } 
} 

편집 : 코멘트가 언급 한 바와 같이, 만약 하나의 ab 때문에하지 ba (라는 조합)이 [a, b, c] 요소, 다음 다음 코드는 작동합니다 경우 쌍에

final ArrayList<String> collected = new ArrayList<String>(); 
for(int x = 0; x < 275; x++) { 
    for(int y = 0; y < 275; y++) { 
     if(y == x) continue; // will properly increase y 
     final String p1 = arrayOfStrings[x] + arrayOfStrings[y]; 
     final String p2 = arrayOfStrings[y] + arrayOfStrings[x]; 
     if(!collected.contains(p1) && !collected.contains(p2)) { 
      collected.add(p1); 
     } 
    } 
} 
// TODO: do stuff with collected 
2

가능한 모든 n 튜플 문자열을 인쇄하고 reqLen 속성을 2로 설정하고 가능한 모든 쌍을 인쇄하는 예제를 제공합니다.

public class MyString { 

String[] chars = {"a", "b", "c"}; 
int reqLen = 2; 

private void formStrings(String crtStr){ 

    if (crtStr.length() == reqLen){ 

     System.out.println(crtStr); 
     return; 
    } 
    else 
     for (int i = 0; i < chars.length; i++) 
      formStrings(crtStr + chars[i]); 

} 

public static void main(String[] args) { 

    new MyString().formStrings(""); 
}} 
관련 문제