博主说两句,博主大三在校生,最近面试积累了很多的题目,于是准备整理一下 尽管可能不是最优解
注: 以下所有的代码均 通过了牛客网的测试
[编程题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 Dequedeque = new LinkedList (); 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); } }}