【48天笔试强训】day7

Fibonacci数列

描述

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

输入描述:

输入为一个正整数N(1 ≤ N ≤ 1,000,000)

输出描述:

输出一个最小的步数变为Fibonacci数"


示例1

输入:

15

复制输出:

2

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,f2=1,f3=f1+f2;
        while(f3

合法括号序列判断

描述

给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。

测试样例:

"(()())",6
返回:true

测试样例:

"()a()()",7
返回:false

测试样例:

"()(()()",7
返回:false

【解题思路】:

       用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配。


import java.util.*;

public class Parenthesis {
    public boolean chkParenthesis(String A, int n) {
        // write code here
        Stack stack=new Stack<>();
        char[] arr=A.toCharArray();
        for(char ch:arr){
            if(ch=='('){
                stack.push('(');
            }else if(ch==')'){
                //遇到右括号的情况
                //栈为空,直接报错
                if(stack.isEmpty()){
                    return false;
                }else if(stack.peek()=='('){
                    //如果匹配,那么就弹出来一个
                    stack.pop();
                }
            }else{
                return false;
            }
        }
        return stack.isEmpty();
    }
}

你可能感兴趣的:(算法,数据结构)