首页 > 代码库 > leecode之aoti

leecode之aoti


【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】


    最近一段时间,发现自己编写代码的能力下降了很多。所以,网上找了一下,看看有没有类似可以提高的项目。偶尔看别人都在leetcode上刷题目,感觉特别有意思,所以拿来练练手。因为leetcode上每个题目有很多测试用例,所以你上传的代码必须要全部通过这些测试用例才行。


    不多说,为了不丢人。先找容易的题目开始,这样也好尽快上手。atoi,其实就是字符串转变为整数的代码。看着容易,其实也不容易,因为你需要考虑各种情况,其实这对我们提高代码质量是很有帮助的。代码你可以根据自己的需要写成cpp、java或者python的格式。


    因为我的机器上没有安装vc编译器,所以只能根据网站反馈的信息进行调整,看日志前后花了快1个半小时,工作了这么多年,这个成绩还是很丢人的。大家可以根据自己的需要到leetcode上面试一试,权当练习好了。看到这份博客的同学最好先不要看代码,自己去试一试,看看能不能在保证正确的时候保证性能的最大化。


    为了不侵犯原作者的版权,这边只是给出我个人对题目的理解和答案,当然仅仅是抛砖引玉了。

#inlude <iostream>
using namespace std;

class Solution {

public:
	static int atoi(const char* str) {
	
		int index = 0;
		int neg = 0;
		int total = 0;
		int len = strlen(str);
		char val  = 0;
		int count = 0;
		if(!len) return total;
		
		while(str[index] == ‘ ‘)
			index ++;
			
		if(str[index] == ‘+‘) 
			index ++;
		else if(str[index] == ‘-‘) {
			neg = 1;
			index++;
		}
		
		for(; index < len; index ++) {
		
			val = str[index] - ‘0‘;
			
			count ++;
			if(val < 0 || val > 9)
				break;
				
			if(count > 10) {
				if(neg) total = 0x80000000;
				else total = 0x7fffffff;
				goto end;
			}
		
			if(!neg && count == 10) {
				if(val > (0x7fffffff - total * 10)) {
					total = 0x7fffffff;
					goto end;
				}
			}else if(neg && count == 10){
				if((unsigned int)val > (unsigned int)((-total * 10) - (int)(0x80000000))) {
					total = 0x80000000;
					goto end;
				}
			}
		
			total = total * 10 + val;
		}
		if (neg) total = -total;
		
	end:
		return total;
	}
};




leecode之aoti