귀속 에 관 한 세 가지 알고리즘 문제 의 총 결
한 창고 에 1, 2, 3, 4, 5 를 순서대로 넣 으 면 창고 꼭대기 에서 창고 밑 까지 각각 5, 4, 3, 2, 1 이다. 이 창 고 를 옮 긴 후에 창고 꼭대기 에서 창고 밑 까지 는 1, 2, 3, 4, 5 이다. 즉 창고 안의 원소 의 역순 을 실현 하지만 귀속 함수 로 만 실현 할 수 있 고 다른 데이터 구 조 를 사용 하지 않 아 도 된다.
우선, 재 귀 방법 을 어떻게 사용 하 는 지 보조 저장 소 를 사용 하지 않 고 스 택 의 기본 요 소 를 얻 을 수 있 는 지 생각 합 니 다.
4. 567913. 그 다음 에 물이 도랑 에 이 르 렀 다.
public static int getAndRemoveLast(Stack stack){
int result = stack.pop();
if(stack.isEmpty()){
return result;
}else{
int last = getAndRemoveLast(Stack);
stack.push(result);
return last;
}
}
2. 문자열 str 를 지정 합 니 다. str 는 표현 식 을 표시 합 니 다. 그 중에서 정수, 덧셈 기호 와 좌우 괄호 만 있 을 수 있 습 니 다. 공식 적 인 계산 결 과 를 되 돌려 줍 니 다. 예 를 들 어 str = "48 * (70 - 65) - 43) + 8 * 1", - 1816;str = "3 + 1 * 4", 7 로 돌아 가기;str = "3 + (1 * 4)", 반환 7
설명: 주어진 문자열 은 반드시 정확 한 표현 식 이 라 고 볼 수 있 습 니 다. 즉, str 에 대해 공식 적 인 유효성 검 사 를 할 필요 가 없습니다.만약 음수 라면 괄호 로 묶 어야 한다. 예 를 들 어 '4 * (- 3)' 이지 만 음수 가 공식 적 인 시작 이나 괄호 부분의 시작 이 라면 괄호 가 없 을 수 있다. 예 를 들 어 '- 3 * 4' 와 '(- 3 * 4)' 는 모두 합법적이다.계산 과정 이 넘 치 는 상황 을 고려 하지 않 는 다.
public static void reverse(Stack stack){
if(stack.isEmpty()){
return;
}
int i = getAndRemoveLast(stack);
reverse(stack);
stack.push;
}
3. 창 최대 값 배열 을 만 드 는 데 는 전체 배열 arr 와 w 크기 의 창 이 배열 의 맨 왼쪽 에서 맨 오른쪽 으로 미 끄 러 지고 창 이 오른쪽으로 미 끄 러 집 니 다.예 를 들 어 배열 은 {4, 3, 5, 4, 3, 3, 6, 7} 이 고 창 크기 는 3 일 때: [4 3 5] 4, 3, 6, 7 창 중 최대 치 는 5, 4 [3, 5 4] 3, 6, 7 창 중 최대 치 는 5, 4, 3 [5, 3] 3, 7 창 중 최대 치 는 5, 4, 3, 5, 3, 7 창 중 최대 치 는 4, 3, 5, 4, 5, 4, 4, 4, 3, 7 창 중 최대 치 는 6, 4, 3, 5, 4, 4, 3, 4, 4, 3, 3, 3, 7 창 중 최대 치 는 7 이 고 배열 길이 가 n 이면 창 크기 는 w,n - w + 1 개의 창의 최대 값 이 발생 합 니 다. 함 수 를 실현 하 십시오. 입력: 정형 배열 arr, 창 크기 는 w 출력 입 니 다. 길이 가 n - w + 1 인 배열 res, res [i] 는 각 창 상태 에서 의 최대 값 을 표시 합 니 다. 이 예 를 들 어 결 과 는 {5, 5, 5, 4, 6, 7} 입 니 다.
public static int getNum(LinkedList que){
int res = 0;
boolean add = true;
String cur = null;
int num = 0;
while(!que.isEmpty()){
cur = que.pollFirst();
if(cur.equals("+")){
add = true;
}else if(cur.equals("-")){
add = false;
}else{
num = Integer.valueOf(cur);
res += add ? num : (-num);
}
}
return res;
}
public static int getValue(String str){
return value(str.toCharArray(), 0)[0];
}
public static void addNum(LinkedList que, int num){
if(!que.isEmpty()){
int cur = 0;
String top = que.pollLast();
if(top.equals("+") || top.equals("-")){
que.addLast(top);
}else{
cur = Integer.valueOf(que.pollLast);
num = top.equals("*") ? (cur * num) : (cur/num);
}
}
que.addLast(String.valueOf(num));
}
public static int[] value(char[] str, int i){
LinkedList que = new LinkedList();
int pre = 0;
int[] bra = null;
while(i < str.length && str[i] != ')'){
if(str[i] >= '0' && str[i] <= '9'){
pre = pre * 10 + str[i++] - '0';
}else if(str[i] != '('){
addNum(que, pre);
que.addLast(String.valueOf(str[i++]));
pre = 0;
}else{
//
bra = value(str, i + 1);
pre = bra[0];
i = bra[i] + 1;
}
}
addNum(que,pre);
return new int[] {getNum(que), i};
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.