算法:
1、镜像回文字符串
1<==>1
2<==>5
3<==>8
4<==>7
6<==>9
输入:
3(输入个数)
25
6996
1111
输出:
YES
NO
YES
代码:
import java.util.*;
public class Main {
static Map<Character,Character> map=new HashMap<Character,Character>();
public static String test(String num){
for(int j=0;j<=num.length()/2;j++){
if(map.get(num.charAt(j))!=num.charAt(num.length()-1-j)){
return "No";
}
}
return "Yes";
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int count=sc.nextInt();
sc.nextLine();
String[] a=new String[count];
for(int i=0;i<count;i++){
a[i]=sc.nextLine();
}
map.put('1','1');
map.put('2','5');
map.put('3','8');
map.put('4','7');
map.put('6','9');
map.put('5','2');
map.put('8','3');
map.put('7','4');
map.put('9','6');
for(int i=0;i<a.length;i++){
System.out.println(test(a[i]));
}
}
}
2、运算符添加
输入数字字符串,数字中间可以添加+号或-号,求可以得到目标数字的解法个数。(如输入21,目标数字1,2-1=1,输出1)
输入:
21 1
12345 3
输出:
1
1
代码:(参考牛客网大神解法,回溯)
import java.util.Scanner;
public class Main {
public static int test(String num,int i,int j,int target){
int result=0;
for(int m=i;m<=j;m++){
result=result*10+(num.charAt(i)-'0');
}
if(i==0){
if(result==target){
return 1;
}else{
return 0;
}
}
//两个数之间是+号、-号或者没有符号
int count=test(num,i-1,i-1,target+result)+test(num,i-1,i-1,target-result)+test(num,i-1,j,target);
return count;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int count=sc.nextInt();
sc.nextLine();//读取数字后的换行
for(int i=0;i<count;i++){
String str=sc.nextLine();
String[] strs=str.split(" ");
String num=strs[0];
int target=Integer.parseInt(strs[1]);
System.out.println(test(num,num.length()-1,num.length()-1,target));
}
}
}
选择题:
数组循环右移n位,时间复杂度最低为多少?
思路:
不使用另外数组的情况下向左移动n位:
1)翻转数组前n个元素
2)翻转数组剩下的元素
3)翻转整个数组
向右移动n位:
1)翻转整个数组
2)翻转数组前n个元素
3)翻转数组剩下的元素
参考:https://blog.csdn.net/weixin_42010197/article/details/104485398