2021秋招部分笔试题汇总——牛客

一、

leetcode第13题,从低位向高位进行遍历,对数字进行累加即可
import java.util.*;
public class Solution {
    public int romanToInt (String s) {
        if(s == null || s.length() == 0)
            return 0;
        HashMap<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);
        int res = 0;
        for(int i = s.length() - 1; i >= 0; i--){
            if(i >= 1 && s.charAt(i) == 'V' && s.charAt(i - 1) == 'I'){
                res += 4;
                i --;
            }else if(i >= 1 && s.charAt(i) == 'X' && s.charAt(i - 1) == 'I'){
                res += 9;
                i --;
            }else if(i >= 1 && s.charAt(i) == 'L' && s.charAt(i - 1) == 'X'){
                res += 40;
                i --;
            }else if(i >= 1 && s.charAt(i) == 'C' && s.charAt(i - 1) == 'X'){
                res += 90;
                i --;
            }else if(i >= 1 && s.charAt(i) == 'D' && s.charAt(i - 1) == 'C'){
                res += 400;
                i --;
            }else if(i >= 1 && s.charAt(i) == 'M' && s.charAt(i - 1) == 'C'){
                res += 900;
                i --;
            }else
                res += map.get(s.charAt(i));
        }
        return res;
    }
}

二、

//import java.io.InputStreamReader;
//import java.io.BufferedReader;
//import java.io.EOFException;
import java.util.Scanner;
/*
 - 全部首字母大写
 - 第一个单词首字母小写,其余单词首字母大写
 - 单词全部小写,由下划线连接
 - 单词全部小写,由减号连接
*/
public class Main{
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        //BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //String s = br.readLine();
//解析输入用空格将每个单词隔开
        StringBuilder ans = new StringBuilder();
        ans.append(s.charAt(0));
        for(int i = 1;i < s.length();i++){
            if(Character.isUpperCase(s.charAt(i))){
                ans.append(' ').append(s.charAt(i));
            }else if(s.charAt(i) == '_' || s.charAt(i) == '-'){
                ans.append(' ').append(Character.toUpperCase(s.charAt(i+1)));
                i++;
            }else{
                ans.append(s.charAt(i));
            }
        }
        String str1 = ans.toString().replaceAll(" ","");
        String str2 = ans.toString();
        String s1 = str1.substring(0,1).toUpperCase() + str1.substring(1);
        String s2 = str1.substring(0,1).toLowerCase() + str1.substring(1);
        String s3 = str2.toLowerCase().replaceAll(" ","_");
        String s4 = str2.toLowerCase().replaceAll(" ","-");
        System.out.print(s1 + " " + s2 + " " + s3 + " " + s4);
    }
}
/*
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        int start = 0;
        StringBuilder ans0 = new StringBuilder();
        StringBuilder ans1 = new StringBuilder();  
    for (int i = 1; i < s.length(); i++) {
        char c = s.charAt(i);
        if ((c >= 'A' && c <= 'Z') || c == '-' || c == '_') {
            ans0.append(Character.toUpperCase(s.charAt(start))).append(s, start + 1, i);
            ans1.append(Character.toLowerCase(s.charAt(start))).append(s, start + 1, i).append('_');
            start = i;
            if (c == '-' || c == '_')
                start++;
        }
    }
    String s1 = ans0.append(Character.toUpperCase(s.charAt(start))).append(s, start + 1,         s.length()).toString();
    String s2 = ans1.append(Character.toLowerCase(s.charAt(start))).append(s, start + 1, s.length()).toString();

    System.out.print(s1 + " ");
    System.out.print(s1.substring(0, 1).toLowerCase() + s1.substring(1) + " ");
    System.out.print(s2+" ");
    System.out.println(s2.replaceAll("_", "-"));

}
*/   

三、
import java.util.*;
public class Solution {
    StringBuilder res=new StringBuilder();
    LinkedList<Integer> stack_multi=new LinkedList<>();
    LinkedList<String> stack_res=new LinkedList<>();
    public String computeString(String s) {        
        int multi=0;
        for(char c:s.toCharArray()){
            if(c=='['){
                stack_multi.addLast(multi);
                stack_res.addLast(res.toString());
                multi=0;
                res=new StringBuilder();
            }else if(c==']'){
                StringBuilder sb=new StringBuilder();
                int cur_multi=stack_multi.removeLast();
                for(int i=0;i<cur_multi;i++) sb.append(res);
                res = new StringBuilder(stack_res.removeLast()+sb);
            }else if(c>='0'&&c<='9') multi=multi*10+c-'0';
            else if(c=='*') continue;
            else res.append(c);
        }
        return res.toString();
    }
}

四、
/*
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] s = sc.nextLine().split(" ");
        int[] arr = new int[s.length];
        for(int i=0; i<s.length; i++){
            arr[i] = Integer.parseInt(s[i]);
        }
        String res = binarySearchTree(arr,0,arr.length-1);
        System.out.println(res.substring(0,res.length()-1));
    }

    public static String binarySearchTree(int[] arr, int start, int end){
        if(start == end){
            return String.valueOf(arr[start] + " ");
        }
        int index = start;
        boolean flag = false;
        for(int i = start; i <= end; i++){
            if(arr[i] > arr[start]) {
                flag = true;
                index = i;
                break;
            }
        }
        if(flag){
            return binarySearchTree(arr, start+1,index-1) + binarySearchTree(arr, index, end);
        } else {
            return binarySearchTree(arr, start+1,end);
        }
    }
}  
*/
二叉查找树的中序遍历是递增数组,将输入的前序序列进行排序可得到中序遍历数组,根据前序和中序遍历序列可还原二叉树,则可找到所有的叶子节点。
模拟前序遍历,找到左右子树的范围,若子树只有一个节点,加入到结果集。
import java.util.*;
public class Main {

        private static List<Integer> res;
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String s = sc.nextLine();
            sc.close();

            String[] ss = s.split(" ");
            int n = ss.length;
            int[] nums = new int[n];
            res = new ArrayList<>();

            for (int i = 0; i < n; i++) {
                nums[i] = Integer.parseInt(ss[i]);
            }

            dfs(nums, 0, n - 1);
            for (int r: res) {
                System.out.print(r + " ");
            }
        }

        private static void dfs(int[] nums, int left, int right) {
            if (left == right) {
                res.add(nums[left]);
                return;
            } else if (left > right) {
                return;
            }
            int root = nums[left];
            //找到右子树的起点
            int rightStart = left + 1;
            for (int i = left + 1; i <= right; i++) {
                if (nums[i] > root) {
                    rightStart = i;
                    break;
                }
            }
            if (nums[rightStart] > root) {
                dfs(nums, left + 1, rightStart - 1);
                dfs(nums, rightStart, right);
            } else {
                 dfs(nums, left + 1, right);   
            }
        }
    }    
五、
class Solution {
    public boolean checkValidString(String s) {
        int l = 0, r = 0;
        for (char c : s.toCharArray()) {
            if (c == '(') {
                l++; r++;
            } else if (c == ')') {
                l--; r--;
            } else {
                l--; r++;
            }
            l = Math.max(l, 0);
            if (l > r) return false;
        }
        return l == 0;
    }
}

六、

import java.util.*;
/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */
public class Solution {
    public ListNode reverseLinkedList (ListNode head, int k) {
        ListNode dum=new ListNode(0);
        dum.next=head;
        ListNode pre=dum,end=dum;
        while(end.next!=null){
            for(int i=0;i<k && end.next!=null;i++) end=end.next;
            //if(end==null) break;
            ListNode second=end.next;
            end.next=null;
            ListNode start=pre.next;
            pre.next=reverseList(start);
            start.next=second;
            pre=start;
            end=start;
        }
        return dum.next;
    }
    private ListNode reverseList(ListNode head){
        ListNode pre=null,cur=head;
        while(cur!=null){
            ListNode tmp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=tmp;
        }
        return pre;
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值