首页 > 学院 > 开发设计 > 正文

Leetcode日记(1)

2019-11-10 18:40:19
字体:
来源:转载
供稿:网友

        有段时间没有写代码了,就上Leetcode练练手,先做几个简单的题目开个头,从其中也发现了自己的一些不足,感觉自己STL也该开始慢看了。

Two Sum

问题描述

       Given an array of integers, return indices of the two numbers such that they add up to a specific target.        You may assume that each input would have exactly one solution, and you may not use the same element twice. Example:        Given nums = [2, 7, 11, 15], target = 9,        Because nums[0] + nums[1] = 2 + 7 = 9,        return [0, 1].

分析

       测试样例是vector类型的数据,有几种求解方法,笔者选择的是暴力求解,或者可以通过哈希表的方法求解,但是笔者对于STL的一些东西还不是很了解,只能暂时望而却步。写代码的时候要考虑问题无解的情况。

解答

class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; for (int i = 0; i < nums.size(); i++) { const int gap = target - nums[i]; for (int j = i + 1; j < nums.size(); j++) { if (gap == nums[j]) { result.push_back(i); result.push_back(j); return result; } } } throw "No two sum solution"; }};

Reverse Integer

问题描述

       Reverse digits of an integer.        Example1: x = 123, return 321        Example2: x = -123, return -321 Note:        The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

分析

       需要考虑负数和翻转溢出的情况,long的类型也是32bit的,所以选择long long类型,比较时借用常量后缀。

解答

class Solution {public: int reverse(int x) { long long result = 0; while (x) { result = result * 10 + x % 10; x /= 10; } if (result > 2147483647LL || result < -2147483648LL) return 0; return result; }};

Palindrome Number

问题描述

       Determine whether an integer is a palindrome. Do this without extra space.

分析

       可以使用翻转再比较的方法,或者依次取第一位和最后一位来比较。负数不属于回文数。

解答

class Solution {public: bool isPalindrome(int x) { if (x < 0) return false; int reverse = 0; int origin = x; while (x) { reverse *= 10; reverse += x % 10; x /= 10; } return reverse == origin; }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表