招行信用卡中心2021暑期实习笔试

算法:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值