欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode 7 easy的难度但是还是再次的提醒了我 math的重要性

程序员文章站 2022-05-23 11:01:53
...

目的为了自己再次回顾

题目要求:

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

click to show spoilers.

Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

我刚开始的解决办法:也是我经常用到的方法,string的小白

public int reverse(int x) {
		int ret = 0;
		int tag = 0;
		String str = Integer.toString(x);
		if (str.startsWith("-")) {
			str = str.substring(1);
			tag = -1;
			System.out.println(str);

		}
		char[] array = str.toCharArray();

		int l = array.length - 1;
		for (int i = 0; i <= l / 2; i++) {
			char t = array[l - i];
			array[l - i] = array[i];
			array[i] = t;
		}
		if (tag < 0) {
			try{
				ret = -Integer.parseInt(String.valueOf(array));
			}catch(Exception e){
				ret=0;
			}
		} else {
			try{
				ret = Integer.parseInt(String.valueOf(array));
			}catch(Exception e){
				ret=0;
			}
		}

		return ret;

	}

这种解决办法,明显的复杂了,那么接下来显示数学的reverse 方法,既求余数,把余数放在前面,其实也间接地说明了,我当时看到题并没有想到数学方法,同时再次的用到了,在处理越界的问题上除法比乘法的优点

public int reverse(int x) {
		int ret = 0;
		while(x!=0){
			if(ret>(Integer.MAX_VALUE/10)||ret<(Integer.MIN_VALUE/10)){
				ret=0;
				break;
			}
			ret=ret*10+x%10;//自己总是记不住
			x=x/10;
		}
		
		
		return ret;
	}


相关标签: 回顾