前言:
大家好,我是良辰丫,刷题的第七篇,牛客网选择题+编程题Fibonacci数列+合法括号序列判断,很喜欢那种通过一点点的努力,然后感受到自己正在慢慢进步的感觉。就像爬山一样,随着跟山顶的距离逐渐拉近,看到的风景也越来越美,内心更是越发欢愉。其实无论离山顶有多远,人总归应该多看些这种风景的。💞💞💞
🧑个人主页:良辰针不戳
📖所属专栏:百日冲大厂
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。
1. 选择题
java是一种编程语言,此选项选择计算机语言.
- public是访问权限修饰限定符,表示共有的.
- abstract是抽象类的关键字.
- final表示最终类,它修饰的变量为常量,修饰的类为最终类,不可被继承.修饰的方法不可被重写.
- class是类的关键字.
接口是为了被实现,因此需要使用public,特殊记忆一下.
round方法表示四舍五入.
java不支持多继承,但是接口可以多次被实现.
- java不支持多继承.
- 一个类可以实现多个接口.
- 父类可以派生多个子类,但是一个子类不可以继承多个父类.
- 一个类可以实现多个接口.
静态成员属于类,所有对象共享它的内容.
hasNext方法属于迭代器iterator.
this指向类的一个实例,是一个对象属性.
- ASCII包括特殊字符,0-9,大小写字母
- BCD包含数字.
- java的字符码集是Unicode,大家特殊记忆一下.
2. 编程题
2.1 Fibonacci数列
做题链接:
链接: Fibonacci数列
题目描述:
做题思路:
先搞懂题,咱们举一个数字,假设N为7,7前面的斐波那契数为5,7后面的斐波那契数为8.7到8只需要加1,7到5需要减2,那么7最少需要1步变成斐波那契数.
- 看到上面,想必大家已经了解了题意,那么,要想找到最小步,需要找到N左边和右边的斐波那契数.
- N-left与right-N进行比较,结果最小的即为最小步.
- 那么N正好与斐波那契数相同呢?这种情况咱们可以包含在right中,比较方便,包含在左边其实也行.
- 我们学习了一种循环的方式,找斐波那契数,这道题如果采用递归很难做出来.
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(n > b){
c = a+b;
a = b;
b = c;
}
int min = Math.min(n-a,b-n);
System.out.println(min);
}
}
2.2 合法括号序列判断
做题链接:
链接:合法括号序列判断
题目描述:
做题思路:
做题,先读懂题意,然后找合适的方法,才能"对症下药",这道题看起来有些复杂,其实找到了方法,并没有大家想象的那么难.
- 左右括号进行匹配,最先遍历的左括号最后与右括号匹配.咿呀,一句点醒梦中人.这不是我们所学的数据结构栈嘛?
- 只能偶数个括号进行匹配,如果括号个数不是偶数,我们直接返回错误.
- 定义一个栈的数据结构,开始我们的遍历之旅.
- 在这里,我们需要考虑栈是否为空,栈为空的时候,我们弹出元素的时候就会产生异常.
- 我们让左括号进栈.
- 匹配到右括号的时候,看栈里是否有左括号进行匹配.如果有,弹出栈中的一个左括号.
- 如果遍历到非括号的字符,直接返回false.
- 遍历完毕后,如果栈为空,说明括号匹配成功,反之,匹配失败.
public boolean chkParenthesis(String A, int n) {
// write code here
if(n % 2 == 1){
return false;
}
Stack<Character> stack = new Stack<>();
for(int i = 0;i<A.length();i++){
char ch = A.charAt(i);
if(ch =='('){
stack.push(ch);
} else if(ch == ')'){
if(stack.empty()){
return false;
}
if(stack.peek() == '('){
stack.pop();
} else {
return false;
}
} else {
return false;
}
}
return stack.empty();
}