当前位置:   article > 正文

【48天笔试强训】day7

【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

  1. import java.util.Scanner;
  2. // 注意类名必须为 Main, 不要有任何 package xxx 信息
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner in = new Scanner(System.in);
  6. int N=in.nextInt();
  7. int f1=0,f2=1,f3=f1+f2;
  8. while(f3<N){
  9. f3=f1+f2;
  10. f1=f2;
  11. f2=f3;
  12. }
  13. System.out.println(Math.min(N-f1,f3-N));
  14. }
  15. }

合法括号序列判断

描述

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

测试样例:

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

测试样例:

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

测试样例:

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

【解题思路】:

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


  1. import java.util.*;
  2. public class Parenthesis {
  3. public boolean chkParenthesis(String A, int n) {
  4. // write code here
  5. Stack<Character> stack=new Stack<>();
  6. char[] arr=A.toCharArray();
  7. for(char ch:arr){
  8. if(ch=='('){
  9. stack.push('(');
  10. }else if(ch==')'){
  11. //遇到右括号的情况
  12. //栈为空,直接报错
  13. if(stack.isEmpty()){
  14. return false;
  15. }else if(stack.peek()=='('){
  16. //如果匹配,那么就弹出来一个
  17. stack.pop();
  18. }
  19. }else{
  20. return false;
  21. }
  22. }
  23. return stack.isEmpty();
  24. }
  25. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/218795
推荐阅读
相关标签
  

闽ICP备14008679号