입력으로, 나는 단지 '0'이 포함 된 문자열 개체가있다.
입력의 예 String word = "00000"
.
문제는 출력으로 다른 문자열이 문자열을 변환하는 것입니다.
변환은 모든 '0'의 결과에 적어도 하나의 '1'에 인접하는 몇 가지 특정 위치에 '1'로 약간 '0'으로 대체하는 것이다.
몇 가지 예 :
input | output
0000 0101
00000 01001
000000 010010
0000000 0100101
00000000 01001010
우리가 알 수 있듯이, 출력은 조건마다 '0'적어도 하나의 '1'에 인접 다.
두 번째 조건은 우리가 '1'의 최소 번호를 사용해야한다는 것입니다.
몇 가지 작업 후 나는 우리가 0의 값을 대체해야하는 '1'의 최소 번호를 알 수 있다는 것을 깨달았다.
수식은 getMinNumber (문자열 워드)의 방법에 의해 표현된다.
여기에 내가 한 일이다.
public class TestUtilities {
public static void main( String[] args ) {
String [] words ={"0000","00000","000000","0000000"} ;
for (String str :words) {
System.out.println(transform(str));
}
}
private static String transform( String word ) {
int min = getMinNumber(word);
//////
//Some processing Here
/////
return "";
}
public static int getMinNumber(String word) {
int min;
if (word.length() % 3 == 0) {
min = word.length() / 3;
} else {
min = (word.length() / 3) + 1;
}
return min;
}
}
도시 된 바와 같이, 난 적자 알고리즘을 찾기 때문에 coudn't는 처리 부분을 떠났다. 일반적으로 나는 매 3 0 일 0을 교체해야하지만, 모든 단어에 대한 작업을 나던.
나는 어떤 단어를 처리 할 수있는 솔루션을 찾고 있어요.
(1)의 최소 금액을 얻으려면 우리는 서로 한 우리가 반복 할 필요가 의미 가능한 한 많은 0으로 처리 할 필요가 010
시간의 최대 양을. 우리는 함께 제로 교체 시작할 수 있도록 010
왼쪽에서
0000000000
↓↓↓↓↓↓↓↓↓
010010010x <- here you can't place another 010 and we have one extra place to fill
경우 010
전체 번호이 수단을 기입하지 않은 우리는 하나 또는 두 개의 이상의 숫자가 필요합니다.
우리는 하나의 숫자 인 경우 어떻게해야합니까? 우리가 사용할 수 0
여기? : 볼 수 있습니다 010010010x
될 것입니다 0100100100
?
그것은 유효한 결과인가? NO 마지막 제로는 없기 때문에 1
근처를. 우리는 사용할 수 없습니다 그래서 0
함께있는 잎 우리를 1
같은 0100100101
.
우리가 한 번 더 자리가 필요한 경우가로 교체 그래서 1
.
우리가 채우기에 두 자리가있을 때 지금 무슨 일이 같은 일이 010010010xx
? 우리는 사용할 수 없습니다 00
마지막 때문에 0
인접한가없는 것입니다 1
.
- 우리가 사용할 수
01
? YES : 우리가 얻을 것이다 때문에 모두 0 인접한가 101001001001
- 우리가 사용할 수
10
? YES : 우리가 얻을 것이다 때문에 여기 모든 0 인접한가 101001001010
우리는 11을 확인해야할까요? 아니 우리는 이미 사용할 수 있기 때문에 01
또는 10
하나 개 추가하는 1
동안이 11
두 가지를 추가 1
하는 결과가 최소한의 금액을 포함하지 않을 수 있도록 1
.
내가 당신에게 그 방법을 사용하여 코드를 작성 떠날 것이다.