华为实习生笔试考后感

刚刚做完了华为的实习生笔试,三个题,楼主渣渣,只有第一个能满分

首先回顾一下题目:

1  输入n个字符串,要求将每个字符串8个分一组,不够的补0,比如123456789应该分成12345678,90000000,然后升序排列,相同的字符串不能删除

输入 2 123 qwertasdfg

输出 12300000 qwertasd fg000000

2输入一个包含数字,括号(大中小都有),字母的字符串,数字代表后面括号内的字符串的输出次数,并且数字后面一定有括号,,变形后倒序输出

如输入 abc3(A)   则输出AAAcba

2[3(qw)]  输出 wqwqwqwqwqwq

 

3 输入一个矩阵,每个点的值代表山的高度,让你从一个点爬到另外一个点,要求不能走走过的点,而且接下来的点一定比你当前的点海拔高

4 5                                   代表矩阵的维度

0 1 2 0 2 0

1  2 8 9 7 0

0 1 2 0 2 0

1  2 8 9 7 0

1 2 3 8                            1,2是起点  3,8 是重点

输出 

5(我忘了点了,这个输出随便写的)

 

下面说的博主的做法都是基于java

1 这一题相对很简单,java里string转成char数组,用arraylist存储,最后使用collections排序就可以了,直接上代码

		Scanner scanner =new Scanner(System.in);
		int a=scanner.nextInt();
		List<String> strings =new ArrayList<String>();
		for (int i = 0; i < a; i++) {
			String string  =scanner.next();
			char chars[]=string.toCharArray();
			int l =chars.length;
			for(int ii=0 ;ii<l/8;ii++) {
				strings.add(new String(chars, ii*8, 8));
			}
			if(l%8>0) {
			StringBuffer add =new StringBuffer(string.substring(l-l%8));
			for(int ii =0 ;ii<8-l%8;ii++) {
				add.append("0");
			}
			strings.add(add.toString());
			}
			
			
		}
//这里使用collections排序,string的比较大小直接使用compare比较就可以
		Collections.sort(strings,new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				// TODO Auto-generated method stub
				return o1.compareTo(o2);
			}
			
		});
//输出
		for (int i=0;i<strings.size();i++) {
			System.out.print(strings.get(i)+" ");
		}

然后第二题,我们可以根据处理的先后顺序判断,首先处理小于号,然后处理[],最后处理{}

这里我是频繁的使用了string转chararray,利用stringbuffer拼接,不知道为什么,准确率只有百分之60(可能数字有可能是两位?)

而且我感觉自己这样写实在太麻烦了,所以考虑用栈或者队列之列的改写,留坑。

        Scanner scanner =new Scanner(System.out);
		char[]cs =scanner.nextLine().toCharArray();
		List<String> strings =new ArrayList<>();
		int q=0;
		for(int i=0 ;i<cs.length;i++) {
			if(cs[i]=='(') {
				StringBuffer stringBuffer =new StringBuffer();
				for(int ii=i+1;ii<cs.length;ii++) {
					
					if(cs[ii]==')') {
						q=ii;
						cs[ii]='!';
					  break;
					}else {
						stringBuffer.append(cs[ii]);
					}
					cs[ii]='!';
				}
				String string =stringBuffer.toString();
				for(int ii=1;ii<cs[i-1]-'0';ii++) {
					stringBuffer.append(string);
				}
				if(cs[i-1]-'0'==0) {
					stringBuffer=new StringBuffer();
					stringBuffer.append("");
				}
				cs[i-1]='!';
				strings.add(stringBuffer.toString());
				i=q+1;
			}
		}
		StringBuffer stringBuffer1 =new StringBuffer();
		q=0;
		for(int i =0;i<cs.length;i++) {
			if(cs[i]=='(') {
				stringBuffer1.append(strings.get(q));
				q++;
			}else if(cs[i]=='!'){
				
			}else {
				stringBuffer1.append(cs[i]);
			}
		}
	   
	    cs =stringBuffer1.toString().toCharArray();
		 strings .clear();
		 q=0;
		for(int i=0 ;i<cs.length;i++) {
			if(cs[i]=='[') {
				StringBuffer stringBuffer =new StringBuffer();
				for(int ii=i+1;ii<cs.length;ii++) {
					
					if(cs[ii]==']') {
						q=ii;
						cs[ii]='!';
					  break;
					}else {
						stringBuffer.append(cs[ii]);
					}
					cs[ii]='!';
				}
				String string =stringBuffer.toString();
				for(int ii=1;ii<cs[i-1]-'0';ii++) {
					stringBuffer.append(string);
				}
				if(cs[i-1]-'0'==0) {
					stringBuffer=new StringBuffer();
					stringBuffer.append("");
				}
				cs[i-1]='!';
				strings.add(stringBuffer.toString());
				i=q+1;
			}
		}
		 stringBuffer1 =new StringBuffer();
		q=0;
		for(int i =0;i<cs.length;i++) {
			if(cs[i]=='[') {
				stringBuffer1.append(strings.get(q));
				q++;
			}else if(cs[i]=='!'){
				
			}else {
				stringBuffer1.append(cs[i]);
			}
		}
	    
		
		cs =stringBuffer1.toString().toCharArray();
		 strings .clear();
		 q=0;
		for(int i=0 ;i<cs.length;i++) {
			if(cs[i]=='{') {
				StringBuffer stringBuffer =new StringBuffer();
				for(int ii=i+1;ii<cs.length;ii++) {
					
					if(cs[ii]=='}') {
						q=ii;
						cs[ii]='!';
					  break;
					}else {
						stringBuffer.append(cs[ii]);
					}
					cs[ii]='!';
				}
				String string =stringBuffer.toString();
				for(int ii=1;ii<cs[i-1]-'0';ii++) {
					stringBuffer.append(string);
				}
				if(cs[i-1]-'0'==0) {
					stringBuffer=new StringBuffer();
					stringBuffer.append("");
				}
				cs[i-1]='!';
				strings.add(stringBuffer.toString());
				i=q+1;
			}
		}
		 stringBuffer1 =new StringBuffer();
		q=0;
		for(int i =0;i<cs.length;i++) {
			if(cs[i]=='{') {
				stringBuffer1.append(strings.get(q));
				q++;
			}else if(cs[i]=='!'){
				
			}else {
				stringBuffer1.append(cs[i]);
			}
		}
	    cs=stringBuffer1.toString().toCharArray();
	    stringBuffer1=new StringBuffer();
	    for(int i=cs.length-1 ;i>=0;i--) {
	    	stringBuffer1.append(cs[i]);
	    }
	    System.out.println(stringBuffer1.toString());
		

第三题,递归最好,直接看代码

然而准确率只有36,原因是时间超过10秒了,所以只能嘤嘤嘤了,继续留坑

(我发现你直接输出3就有18的正确率,继续嘤嘤嘤)

public static long name(int x, int y, int[][] q, int a, int b, int c, int d) {

		long i = 0;
		if(a==c&&b==d)
			return 1;
		if (a + 1 < x &&q[a][b]<q[a+1][b]) {
			
			i += name(x, y, q, a + 1, b, c, d);
		}
		if (a - 1>0 &&q[a][b]<q[a-1][b]) {
			
			i += name(x, y, q, a - 1, b, c, d);
		}
		if (b + 1 < y &&q[a][b]<q[a][b+1]) {
			
			i += name(x, y, q, a , b+1, c, d);
		}
		if (b - 1 >0&&q[a][b]<q[a][b-1]) {
			
			i += name(x, y, q, a , b-1, c, d);
		}
		return i;

	}
	
	public static void main(String[] args) {
		Scanner scanner =new Scanner(System.in);
		int x=scanner.nextInt();
		int y =scanner.nextInt();
		int q [][] =new int [x][y];
		for(int i= 0 ;i<x;i++) {
			for(int ii=0 ;ii<y;ii++) {
				q[i][ii]=scanner.nextInt();	
			}
			
		}
		
		int a =scanner.nextInt();
		int b =scanner.nextInt();
		int c =scanner.nextInt();
		int d =scanner.nextInt();
		
		System.out.println(name(x, y, q, a, b, c, d)/1000000000);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值