day7—编程题

文章目录

  • 1.第一题
    • 1.1题目
    • 1.2思路
    • 1.3解题
  • 2.第二题
    • 2.1题目
    • 2.2涉及到的知识点
    • 2.3思路
    • 2.4解题

1.第一题

1.1题目

描述:
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.2思路

  1. 分别找到输入的数的左边的斐波那契数和右边的斐波那契数
  2. 找到输入的数距左边和右边的斐波那契数最小的距离

1.3解题

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int f1 = 0;
        int f2 = 1;
        while(n > f2){
            int f3 = f2 + f1;
            f1 = f2;
            f2 = f3;
        }
        //循环走完说明f1为n左边的斐波那契数,f2为n右边的斐波那契数,即f1 < n <= f2
        int ret = Math.min(n - f1,f2 - n);
        System.out.println(ret);
    }
}

2.第二题

2.1题目

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

2.2涉及到的知识点

栈:先进后出
public class Stack< E >

empty()
测试此堆栈是否为空。

peek()
查看此堆栈顶部的对象,而不从堆栈中删除它。

pop()
删除此堆栈顶部的对象,并将该对象作为此函数的值返回。

push(E item)
将项目推送到此堆栈的顶部。

2.3思路

  1. 如果字符串长度为奇数,直接返回false
  2. 如果字符串长度为偶数,变量字符串,遇到左括号就入栈,遇到右括号,就看栈顶元素是否与其匹配,如果匹配就弹出栈顶元素
  3. 如果字符串遍历结束,栈也为空返回true
  4. 如果遍历到非括号的元素直接返回false

2.4解题

import java.util.*;
public class Parenthesis {
    public boolean chkParenthesis(String A, int n) {
        if(n % 2 != 0 ){
            return false;
        }
        Stack<Character> stack = new Stack<>();
        char[] ch = A.toCharArray();
        for(int i = 0; i < ch.length;i++){
            if(ch[i] == '('){
                stack.push(ch[i]);//入栈
            }else if(ch[i] == ')'){
                if(stack.empty()){
                    return false;
                }else{
                    if(stack.peek() == '('){
                        stack.pop();//出栈
                    }else{
                        return false;
                    }
                }
            }else{
                return false;
            }
        }
        return stack.empty();
    }
}

你可能感兴趣的:(每日一题,java,算法,开发语言)