【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

经验分享 程序员 微信小程序 职场和发展