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;
	}
};
时间: 2024-10-16 13:42:22

leecode之aoti的相关文章

C/C++--------自己动手实现aoti系列

简介: atoi: 是ASCII to integer 的缩写,是把字符串转换成整型数的一种函数 atol: 是ASCII to long 的缩写,是把字符串转换成长长整型数的一种函数 atoll: 是ASCII to long long 的缩写,是把字符串转换成长长整型数的一种函数 atoq: 是一种废弃的atoll版本, 功能与atoll相似, 因为已经废弃, 本次不参与代码实现 代码实现: aoti #include <stdio.h> /* * 自己动用实现atoi * 功能: 将数字

荷兰国旗问题 划分成3部分 leecode

1 public class Solution { 2 public void sortColors(int[] A) { 3 int len=A.length; 4 int beg=0; 5 int end=len-1; 6 int cur=0; 7 while(cur<=end){ 8 if(A[cur]==0) 9 { 10 swap(A,cur,beg); 11 beg++; 12 cur++; 13 14 15 } 16 else if(A[cur]==1) 17 { 18 cur++

非递归实现先序遍历 java leecode 提交

写完才知道自己学习都是似是而非啊,大家可以也在leecode上提交代码,纯手写,离开eclipse第一种方式:数据结构书上的,使用栈大概思路.1.不断将根节点的左孩子的左孩子直到为空,在这个过程入栈.2.因为栈顶的节点的左孩子为空,所以栈顶的的节点的左子树肯定访问完毕,所以出栈后直接指向右孩子.其实这里面有个思想迭代和递归的本质相同之处是什么?以后会写一篇我的思考. public class Solution { public List<Integer> preorderTraversal(T

后续遍历 java leecode

以前觉得后续遍历最难写,今天看了篇博客http://blog.csdn.net/sgbfblog/article/details/7773103,其实却是我们仔细比较后续遍历和先序遍历,其实后续遍历就是按照  根右左 的方式先序访问然后逆序就是答案了,会先序就会逆序了 leecode 的AC代码: public class Solution { public List<Integer> postorderTraversal(TreeNode root) { ArrayList<Integ

leecode 归并排序 链表(java)

写了好久,终于写成了.第一次zai leecode错题,题目质量很高,适合面试,与 1.归并排序是稳定的,在java中 Arrays.sort(a);中对于对象的排序就是归并排序.对于原子类型数据使用的是快排. 2.算法复杂度,我们都知道归并排序的最好最坏最差复杂度为nlogn,空间复杂度为n,在链表当中,空间复杂度j降为O(1). 3.写链表的排序 1.分: 使用书上的快慢指针来获得中间节点,分割成2个链表 2.和: 将两个链表合成一个,比较简单 3. 主程序 ListNode lmerge(

leecode -- 3sum Closet

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution. For example, given array S = {-1 2

删除顺序链表中重复的数 (一) leecode

Given a sorted linked list, delete all duplicates such that each element appear only once. For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3. 1 /** 2 * Definition for singly-linked list. 3 * public class

树中是否存在路径和为 sum leecode java

https://oj.leetcode.com/problems/path-sum/ /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public boolean hasPathSum(TreeNode root,

树的最大深度 leecode java

秒杀/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int maxDepth(TreeNode root) { if(root==null) return 0; int h1=maxDepth(roo