第一题:最大括号深度
题目描述
现有一字符串仅由 ‘(‘,’)’,‘{‘,’}’,’[‘,’]’六种括号组成。
若字符串满足以下条件之一,则为无效字符串:
①任一类型的左右括号数量不相等;
②存在未按正确顺序(先左后右)闭合的括号。
输出括号的最大嵌套深度,若字符串无效则输出0。
0≤字符串长度≤100000
输入
一个只包括 ‘(‘,’)’,‘{‘,’}’,’[‘,’]’的字符串
输出
一个整数,最大的括号深度
样例输入
[]
样例输出
1
代码:
import java.util.Scanner;
import java.util.Stack;
public class nA {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
int maxDepth = getMaxDepth(input);
System.out.println(maxDepth);
}
public static int getMaxDepth(String input) {
Stack<Integer> stack = new Stack<>();
int maxDepth = 0;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c == '(' || c == '{' || c == '[') {
stack.push(i);
} else if (c == ')' || c == '}' || c == ']') {
if (stack.isEmpty()) {
return 0;
}
char topChar = input.charAt(stack.peek());
if ((c == ')' && topChar == '(') || (c == '}' && topChar == '{') || (c == ']' && topChar == '[')) {
stack.pop();
maxDepth = Math.max(maxDepth, stack.size() + 1);
} else {
return 0;
}
}
}
if (!stack.isEmpty()) {
return 0;
}
return maxDepth;
}
}
第二题:整数编码
题目描述
实现一个整数编码方法
使得待编码的数字越小
编码后所占用的字节数越小
编码规则如下
1.编码时7位一组,每个字节的低7位用于存储待编码数字的补码
2.字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节, 置0表示当前字节为最后一个字节
3.采用小端序编码,低位和低字节放在低地址上
4.编码结果按16进制数的字符格式进行输出,小写字母需要转化为大写字母
输入
输入的为一个字符串表示的非负整数
输出
输出一个字符串表示整数编码的16进制码流
样例输入
0
样例输出
00
第三题:素数之积
题目描述
RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高。
给定一个32位正整数,请对其进行因数分解,找出是哪两个素数的乘积。
输入
一个正整数num
0 < num <= 2147483647
输出
如果成功找到,以单个空格分割,从小到大输出两个素数,分解失败,请输出-1 -1。
样例输入
15
样例输出
3 5
代码实现
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class nF {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int num = scanner.nextInt();
List<Integer> factors = factorize(num);
if (factors.size() == 2) {
System.out.println(factors.get(0) + " " + factors.get(1));
} else {
System.out.println("-1 -1");
}
}
public static List<Integer> factorize(int num) {
List<Integer> factors = new ArrayList<>();
for (int i = 2; i <= Math.sqrt(num); i++) {
while (num % i == 0) {
factors.add(i);
num /= i;
}
}
if (num > 1) {
factors.add(num);
}
return factors;
}
}


370

被折叠的 条评论
为什么被折叠?



