面试题编程题整理(更新中)

博主说两句,博主大三在校生,最近面试积累了很多的题目,于是准备整理一下 尽管可能不是最优解
注: 以下所有的代码均 通过了牛客网的测试 
[编程题01] 整数反转

时间限制:1秒

空间限制:131072K

输入一个有符号整数,输出该整数的反转值。

输入描述:
一个整数


输出描述:
一个整数

输入例子1:
123

输出例子1:
321

输入例子2:
-123

输出例子2:
-321

输入例子3:
200

输出例子3:
2
方法一
public static int reverse2(int x) {
		//x 小于0 则返回 -x 否则返回 x
		int tmp = x < 0?-x:x;
		//给一个变量 用来存结果
		long reverse=0;
		//结束条件是 输入的数已经是最后一个
		while (tmp>0) {
			//每次reverse的数往高位移动一位  tmp每次取模拿到最后一位
			reverse=reverse*10 + tmp%10;
			if(reverse>Integer.MAX_VALUE) {
				return 0;
			}
			//然后tmp每次往低位一位
			tmp=tmp/10;
		}
		//最后判断输入时的符号来给出最终的符号
		return (int)(x < 0? -reverse:reverse);

	}  
方法二
import java.util.Scanner;

/**
* 字符串进行处理 * method two * @author shundong * */ public class Mian { public static void main(String[] args) { Scanner in = new Scanner(System.in); //System.err.println("请输入一个需要反转的整数"); long inStr = in.nextInt(); if (inStr<10&inStr>-10) { System.out.println(inStr); return; } String tmp = inStr <0? -inStr+"":inStr+"";//int 转STRING 且必正 if (inStr<0) { System.out.print("-"); } for(int i = tmp.length()-1;i>=0;i--) { if(tmp.charAt(i)-48!=0) { System.out.print(tmp.charAt(i)); } } } }
[编程题02] 计算 1+2-3+4-5+6-7+8-9...+n 输入n 输出结果
package com.shundongAlgorithmProblem;

import java.util.Scanner;

/**
 * 计算 1+2-3+4-5+6-7+8-9+...+n
 * @author shundong
 *
 */
public class Code_02 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//System.out.println("请输入要计算的n");
		int tmp = in.nextInt();
		long sum = 1;
		for(int i = 2;i<=tmp;i++) {
			if (i%2==0) {
				sum += i;
			}
			else {
				sum += -i;
			}
		}
		System.out.println(sum);
	}
}

  

[编程题03] 写一个简单的单例模式类
package com.shundong.AlgorithmProblem;
/**
 * java写一个简单的单例类
 * @author shundong
 *
 */

class Singleton 
{
	//使用一个类变量来缓存曾经创建的实例
	private static Singleton instance;
	//对构造进行隐藏(private)
	private Singleton(){}
	/**
	 * 提供一个静态方法 
	 * 该方法加入了自定义控制 保证只产生一个Singleton对象
	 * @return 返回Singleton 实例
	 */
	public static Singleton getInstance()
	{
		/**
		 * 如果instance为null,表示还不曾创建Singleton对象 
		 * 如果instance不为null,表示已经创建Singleton对象 
		 */
		if(instance==null) {
			//创建Singleton对象 并将其缓存
			instance = new Singleton();
		}
		return instance;
	}
}
	//for test
	public class SingletonTest
	{
		public static void main(String[] args) 
		{
			//创建实例不能通过构造!!!
			//必须通过getInstance !!!单例 o了
			Singleton aSingleton1 = Singleton.getInstance();
			Singleton aSingleton2 = Singleton.getInstance();
			System.out.println(aSingleton1==aSingleton2);
		}
	}

  [编程题04] 写一个二进制转十进制的转换器(切记注意越界以及非法符号问题)


package com.shundong.stackAndQueue;

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.regex.Pattern;

/**
 * 二进制转换器(栈) 
 * @author shundong
 *
 */
public class BinaryConversion {
	private static String inConversion ;//输入的进制数
	private static Deque<Integer> deque = new LinkedList<Integer>();
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("请输入你需要转换的数字:");
		Scanner in = new Scanner(System.in);
		inConversion = in.nextLine();//拿到键盘 要转换的
		
		if(isInteger(inConversion)) {
			if(!isInt(inConversion)) {
				System.out.println("输入的数字越界了!");
			}else {
				decimalToBinary(Integer.parseInt(inConversion));	
			}
		}else {
			System.err.println("请输入一个数字");
		}
//		decimalToBinary(inConversion);
	}
	/**
	 * 判断被转换的对象 是否为数字
	 * @param str
	 * @return
	 */
	public static boolean isInteger(String str) {    
		Pattern pattern = Pattern.compile("^[-\+]?[\d]*$");    
		return pattern.matcher(str).matches();    
	}  
	/**
	 * 越界判断
	 */
	public static boolean isInt(String val) {
		try {
		Integer.parseInt(val);
		return true;
		} catch (NumberFormatException e) {
		return false;
		}
 	}
	/**
	 * 十进制转二进制
	 * @param val
	 * @return
	 */
	public static void decimalToBinary(int val) {
		do {
			int mod = val % 2;
			deque.push(mod);
			val = val /2 ;
		}while(val>0);
		for (Integer integer : deque) {
			System.out.print(integer);
		}
	}
}

  

 

  
原文地址:https://www.cnblogs.com/shundong106/p/9880321.html