题目一
1.题目
题目链接:合法括号序列判断
2.思路
- 如果字符串不为偶数的时候,直接返回false
- 当长度为偶数的时候,遍历字符串,遇到左括号入栈,遇到右括号,先判断栈是否为空,如果为空,直接返回false,再判断栈顶元素是否为左括号,如果是,则出栈,继续遍历。当遍历结束的时候,如果栈为空,那么字符串就是一个合法的字符串,返回true。
- 如果遇到一个非括号的字符,直接返回false。
3.代码实现
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
if(n % 2 != 0 ){
return false;
}
Stack <Character> stack = new Stack<>();
for(char c: A.toCharArray()){
if(c == '('){
stack.push(c);
}else if(c == ')'){
if(stack.isEmpty()){
return false;
}else if(stack.peek() == '('){
stack.pop();
}
}else{
return false;
}
}
return stack.isEmpty();
}
}
4.反思
慢慢的发现,做题的成功点有两个,一是在于思路的正确与否,一个在于思路的逻辑转化成代码的能力。缺一不可。
题目二
1.题目
题目链接: Fibonacci数列
2.思路
思路很简单:
- 求所给数字的左右两边的斐波那契数,然后比较大小就行了。小的那个则为所求。
3.代码实现
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int a = 0;
int b = 1;
int c = 1;
while(c < n){
a = b;
b = c;
c = a + b;
}
int n1 = n-b;
int n2 = c-n;
System.out.println(n1<n2 ? n1 : n2);
}
}