今日头条2018年校招视频面试过程 一面(编程题两道)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youseenoonehere/article/details/80670421

首先面试官让自我介绍一下 然后问你做过的项目问你擅长的语言 你与其他同学相比的优点 等等 有两道笔试题:

1,0-9a-z表示36进制 写一个方法计算36进制的和

2,单链表进行反转。

附上我写的代码 仅供参考 java代码实现

1,36进制求和

package com.nice.demo.search;

import java.util.HashMap;

/**
 * @author ljg
 *
 */
public class Demo1 {
	
	 private static final String byte36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";// 36进制转十进制时使用  字母大写
	 private static final String[] arrBy36 = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(",");//十进制转36进制使用
	
	public static void main(String[] args) {
		System.out.println(byte36ToTen("1b"));
		//System.out.println(byteTenTo36(47));
		//System.out.println(add("1b", "2x"));
	}
	
	
	
	public static String add(String s1,String s2){
		//先转十进制然后相加在转36进制
		int sum=byte36ToTen(s1)+byte36ToTen(s2);
		
		return byteTenTo36(sum);
		
	}
	/** 将36进制转10进制*/
	public static int byte36ToTen(String s1){
		 HashMap<Character, Integer> map = new HashMap<Character, Integer>();
	        for (int i = 0; i < byte36.length(); i++) {
	            map.put(byte36.charAt(i), i);
	        }
	        int size = s1.length();
	        
	       char []s=s1.toCharArray();
	        int num = 0;
	        for(int i = 0; i<size; i++) {
	            String char2str = String.valueOf(s1.charAt(i)).toUpperCase();//将字母转大写 并将char转字符串
	            num = (int) (map.get(char2str.charAt(0)) * Math.pow(36, size - i - 1) + num);//根据key 取map中对应的value即数字和字母对应的值 然后乘36的n次幂 再相加
	        }

	       /* for(int i=0;i<s.length;i++){
	        	String char2str=String.valueOf(s[i]).toUpperCase();
	        	map.get(char2str.charAt(0) * Math.pow(36,size-i-1));
	        }*/
	       return num;
		
	}
	/** 将十进制转36进制*/
	public static String byteTenTo36(int num) {
        StringBuffer sBuffer = new StringBuffer();
        if(num == 0) {
            sBuffer.append("0");
        }
        while(num > 0) {
            sBuffer.append(arrBy36[num % 36]);//十进制数除36 
            num = num / 36;
        }

        return sBuffer.reverse().toString();//反转一下
    }
	
}

2,单链表反转

package com.nice.demo.search;
import java.util.ArrayList;
import java.util.Collections;
/**
 * 单链表反转
	1 -> 2 -> 3
	3 -> 2 -> 1
 * @author ljg
 *
 */
class ListNode {//单链表 
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

public class Demo2 {
    public ListNode ReverseList(ListNode head) {
        //健壮性判断
    	if(head==null)
            return null;
        if(head.next==null)
            return head;
        
        ArrayList<Integer> li=new ArrayList<Integer>();
        li.add(head.val);
        while(head.next!=null){//用list存储链表的值
            head=head.next;
            li.add(head.val);
        }
        
        Collections.reverse(li);//Collections 反转list集合 没有返回值
        ListNode re=new ListNode(li.get(0)); 
        ListNode flag =null;
        flag=re;
        for(int x=1;x<li.size();x++){//重新新建链表 即反转后的链表
            ListNode rs=new ListNode(li.get(x));
            flag.next=rs;
            flag=rs;
        }
        
        return re;
    }
}


展开阅读全文

没有更多推荐了,返回首页