【day7】合法括号序列判断&Fibonacci数列
这道题的意思是,输入一个整数n,n可能是一个斐波那契数,也可能不是斐波那契数,如果是,n就不用+1或者-1来变成一个斐波那契数,直接返回0;如果不是,那么就返回n变成离他最近的一个斐波那契数的距离
假如n不是斐波那契数,那么n的左边边是一个斐波那契数f1,右边也是一个斐波那契数f2
f1 < n < f2
然后判断 n-f1大还是f2-n大
可以用一个循环来找到f1和f2
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int f1 = 0;
int f2 = 1;
while(f2 < n){
int f3 = f2 + f1;
f1 = f2;
f2 = f3;
}
int min = Math.min(f2-n, n-f1);
System.out.println(min);
}
}
括号要成双成对的出现就是合法括号序列,如果不是成双成对的抵消,或者其中出现除了括号以外的字符,就是不合法的
做法:用栈来写
new一个栈,栈中只存放 ( 字符,遍历字符串,如果出现(左括号就入栈,出现)右括号,就看看此时的栈里面有没有存放(左括号,如果有左括号就取出左括号,然后继续遍历字符串,如果此时栈里面没有(左括号,就说明这个字符串的括号不是成双成对的出现;如果遍历过程遇到非法字符,返回false;
遍历结束后,此时的栈中不应该有元素,如果没有元素,就说明括号成双成对的抵消了,如果遍历结束后栈中仍然有元素)左括号,就说明左括号比右括号数量多,不合法
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
Stack<Character> stack = new Stack<>();
for(int i = 0; i < n; i++){
if(A.charAt(i) == (){
stack.add(A.charAt(i));
}else if(A.charAt(i) == )){
if(stack.empty()){
return false;
}else{
stack.pop();
}
}else{
return false;
}
}
if(stack.empty()){
return true;
}else{
return false;
}
}
}
//一些考点
1.Math.round(11.5); 这个表示四舍五入,结果为12
2.
(1)一个类只能继承一个类,可以实现多个接口
(2)父类 就是抽取共性
(3)java中的继承存在传递性
(4)实例化子类时会递归调用父类的构造方法
3.静态变量可以用实例来调用,也可以通过类名来调用
4.
clone(); finalize(); toString() 是object类的方法
hasNext()是Iterator的方法
5.java使用的字符码集是Unicode
