常见算法题1

1.反转字符串中的单词和反转字符
例如 str=“My name is Teng”;
输出1 str1=“Teng is name My”;
输出2 str2=“yM eman si gneT”;

解法:

public String reverse1(String str){
	String[] s =str.trim().split("\\s");//去掉字符串头尾的空格,并且按照空格进行拆分
	String out=" ";
	for(int i=s.length-1;i>0;i++)
	 {
		out+=s[i]+" ";
	 }
	return out+ s[0];
	
}
public String reverse2(String str){
	String[] s=str.split(" ");
	StringBuilder sb =new StringBuilder();
	for(String s1:s){
	StringBuilder temp =new StringBuilder(s1);
	sb.append(temp.reverse());
	sb.append(" ");
	 }
	return sb.toString().trim();
}

2.把字符串转为整数,输入一个字符串,如果是合法的数值则返回该数字,否则返回0:

public int StrToInt(String str){
	if(str==null||str.length==0) return 0;
	int statr=0int tag=0;//默认为负数,1代表正数
	if(str.charAt(0)=='+'){
		tag=1;
		start=1;
	}else if(str.charAt(0)=='-'){
		tag=0;
		start=1;
	}else{
		tag=1;
		start=0;//默认无符号的为正数
	}
	long result=0;
	for(int i=start;i<str.length;i++){
		char temp =str.charAt(i);
		if(temp>='0'&&temp<='9'){
			result=reslut*10+(temp-'0');
			if(tag==1&&result>Integer.MAX_VALUE)
				throw new RuntimeException("上溢出");
			if(tag==0&&result<Integer.MIN_VALUE)
				throe new RuntimeException("下溢出");
		}else{
		return 0;
		}
	}
	if(tag==0){ 
		return (int)(-1*reslut);
	}else{
		return (int)reslut; 
	}
}

3.判断字符串是否为回文字符串(正读反读都一样的字符串):

public static boolean HuiWen(String str){
	for(int i=0;i<str.length()/2;i++){
		if(str.toCharArray()[i]!=str.toCharArray()[length-1-i]){
			return false;
		}
	}
	return true;
}

4.整数的逆序输出:
例如x=321 输出123
y=-123 输出-321

public int reverse(int x){
	long result=0;
	while(x!=0){
	     reslut=reslut*10+x%10;
	     if(result>Integer.MAX_VALUE||reslut<Integer.MIN_VALUE)
	     	return 0;
	     x=x/10;
}
	return (int)result;
}

5.判断一个数是不是素数(质数)

public boolean isPrimeNumber(int num){	
	if(num==2) return true;
	if(num<=2||num%2==0) return false;
	for(int i=3;i<=Math.sqrt(num);i+=2)
	 {
		if(num%i==0){
			return false;
		}
	 }
	return true;
}

6.输入一个整数,输出该数二进制中1的个数,其中负数用补码表示

public int OneNum(int n){
	int count=0;
	while(n!=0){
		count+=n&1;
		n>>>1;
	}
	return count;
}

7.求一个数的平方根

public int mySqrt(int x){
	long left=0;
	long right=x/2+1;
	while(left<right){
		long mid=left+(right-left+1)/2;
		long square=mid*mid;
		if(square>x){
			right=mid-1;
		}else{
			left=mid;
		}
	}
	return (int)left;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值