目录
合法括号判断
题目链接🔗:合法括号序列判断__牛客网合法括号序列判断https://www.nowcoder.com/questionTerminal/d8acfa0619814b2d98f12c071aef20d4
1.题目描述
给定一个字符串A和其长度n,请返回一个bool值代表它是否为合法的字符串(只能由括号组成)。
2.示例
例子1:
| "(()())",6
|返回:true
例子2:
|"()a()()",7
|返回:false
例子3:
|"()(()()",7
|返回:false
3.主体思路
(1).题目主干总结
字符串是否合法:
1.字符串只能由括号组成
2.一个左括号 "(" 一定有一个 ")" 与之匹配
(2).分析实例,选择合适的数据结构
用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配
4.代码实现
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
if(n%2!=0) {
return false;
}
Stack<Character> stack = new Stack();
for(char c:A.toCharArray()) {
if(c=='('){
//为左括号,入栈
stack.push(c);
}else if(c==')') {
//为右括号
if(stack.isEmpty()) {
//判断栈是否为空,如果栈为空
//在 ) 出现之前没有与之匹配的(
return false;
}else{
//遇到右括号,出栈
stack.pop();
}
}else{
//非法字符(既不是左括号,也不是右括号)
return false;
}
}
//最终栈为空,说明全部都匹配成功
return stack.isEmpty();
}
}
Fibonacci数列
1.题目描述
Fibnacci是这样定义的:
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,21......,在Fibnacci数列里面的数字称为Fibonacci数。
给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N,求最少需要多少步,可以变为Fibonacci数。
2.示例
输入描述
|输入一个整数N(1 <= N <= 1,000,000)
输出描述
|输出一个最小步数变为Fibonacci数
示例:
|15
|2
3.主体思路
找到给定数字左边的一个fibonacci数a,和右边fibonacci数b
左边的比N小,右边的比N大
因为题干指出:
给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1
N-a与N-b的大小(也即为变为fibonacc数的步数)
打印二者中小的那一项即可
4.代码实现
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int a = 0;
int b = 1;
int c = 1;
while(c <= N) {
c = a + b;
a = b;
b = c;
}
//循环结束 a < N <= b(c);
int min = Math.min(N-a,b-N);
//最小步数
System.out.print(min);
}
}