1、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].
思路:
关键词:一遍迭代map
建立map,迭代一遍数组,第一个迭代开始检查numToFind是否存在于map中。存在就返回两者的index;
不存在就把当前的数组nums[i]插入到map。重复迭代下去。 C++:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int,int> hash_map;
for(int i=;i<nums.size();i++)
{
int numToFind=target-nums[i];
if(hash_map.find(numToFind)!=hash_map.end())
{
res.push_back(i);
res.push_back(hash_map[numToFind]);
return res;
}
else
hash_map[nums[i]]=i;
}
return res;
}
};

python:

class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
maps={}
for i in range(len(nums)):
if target-nums[i] in maps:
return i,maps[target-nums[i]]
else:
maps[nums[i]]=i
return -1,-1

7、Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

C++:
class Solution {
public:
int reverse(int x) {
long long res = ;
while(x) {
res = res* + x%;
x /= ;
}
return (res<INT_MIN || res>INT_MAX) ? : res;
}
};

python:

class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
""" if x < 0:
result = (0 - int(str(0-x)[::-1]))
if result <= 2147483647 and result >= -2147483648:
return result
else:
return 0
else:
result = int(str(x)[::-1])
if result <= 2147483647 and result >= -2147483648:
return result
else:
return 0

9、Palindrome Number

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1:

Input: 121
Output: true

Example 2:

Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:

Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Follow up:

Coud you solve it without converting the integer to a string?

C++

//思路:反转后一样

class Solution {
public:
bool isPalindrome(int x) {
if(x<0|| (x!=0 &&x%10==0)) return false;
int sum=0;
int x1=x;
while(x)
{
sum = sum*10+x%10;
x = x/10;
}

return (x1==sum);
}
};

 

python

def isPalindrome(self, x):
if x < 0:
return False
p, res = x, 0
while p:
res = res * 10 + p % 10
p /= 10
return res == x

14、Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.

If there is no common prefix, return an empty string "".

Example 1:

Input: ["flower","flow","flight"]
Output: "fl"

Example 2:

Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

Note:

All given inputs are in lowercase letters a-z.

C++

First one: check from strs[][] to strs[i][]. If matches, check strs[][] to strs[i][].
思路:ans由0开始添加前缀
Code: class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==)
return "";
string ans="";
int max=INT_MAX;
for(auto& s:strs)
{
max=(max>s.length())?s.length():max;
}
for(int i=;i<max;i++)
{
bool flag=true;
char x=strs[][i];
for(auto& s:strs)
{
if(s[i]!=x)
{
flag=false;
break;
}
}
if(flag==false)
return ans;
ans+=x;
}
return ans;
}
}; ////////////////////////////////////////////////// Second one: assume the prefix is strs[]. Compair with strs[i], and cut the letters which don’t match.
ans由最小的串开始不断减少前缀
Code: class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==)
return "";
string ans=strs[];
int max=INT_MAX;
for(auto& s:strs)
{
if(s.length()==)
return "";
int i=;
for(i=;i<ans.length()&&i<s.length();i++)
{
if(s[i]!=ans[i])
break; //跳出整个循环
}
ans=ans.substr(,i);
} return ans;
}
}; //////////////////////////////////// Third one: use a Trie data structure to save the strs. Search the trie, and stops when a TrieNode has more than one son.
数据结构trie
Code: class TrieNode{
public:
bool val;
TrieNode* next[];
int sons;
TrieNode() :val(false), sons()
{
for (int i = ; i < ; i++)
next[i] = nullptr;
}
}; class Trie{
private:
TrieNode* putst(string& s, TrieNode * node, int loc, TrieNode *father)
{
if (s.length() == )
{
node->val = true;
node->sons++;
return node;
}
if (node == nullptr)
{
node = new TrieNode();
if (father != nullptr)
father->sons++;
}
if (loc == s.length())
{
node->val = true;
return node;
}
if (s[loc] >= 'a')
node->next[s[loc] - 'a'] = putst(s, node->next[s[loc] - 'a'], loc + , node);
else
node->next[s[loc] - 'A' + ] = putst(s, node->next[s[loc] - 'A' + ], loc + , node);
return node;
} public:
TrieNode *root;
void insert(string & str){ putst(str, root, , nullptr); }
Trie(){ root = new TrieNode(); }
}; class Solution {
private:
string findPre(TrieNode * node)
{
if (node == nullptr || (node != nullptr&&node->sons > ))
return string("");
int i = ;
for (i = ; i < ; i++)
{
if (node->next[i] != nullptr)
break;
}
if (i == )
return string("");
char temp1 = ((i>) ? ('A' + i) : ('a' + i));
string temp;
temp.insert(temp.begin(), temp1);
if (node->val)
{
return string("");
}
else
{
return temp + findPre(node->next[i]);
}
} public:
string longestCommonPrefix(vector<string>& strs) {
Trie a;
for (auto& str : strs)
a.insert(str);
return findPre(a.root);
}
};

python:good trick

def longestCommonPrefix(strs):
if not strs:
return "" for i, letter_group in enumerate(zip(*strs)): #返回所有字符串各自第一个元素组成的第一组元祖,例如("a","a")
if len(set(letter_group)) > 1:
return strs[0][:i]
else: #如果长度不一样,for在最短的字符串结束并跳到else
return min(strs) strs=["abcd","adef"]
print(longestCommonPrefix(strs))

同c++的第二种方法

 def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
shortest = min(strs,key=len)
for i, ch in enumerate(shortest):
for other in strs:
if other[i] != ch:
return shortest[:i]
return shortest

20、Valid Parentheses

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example 1:

Input: "()"
Output: true

Example 2:

Input: "()[]{}"
Output: true

Example 3:

Input: "(]"
Output: false

Example 4:

Input: "([)]"
Output: false

Example 5:

Input: "{[]}"
Output: true

C++

class Solution {
public:
bool isValid(string s) {
stack<char> paren;
for (char& c : s) {
switch (c) {
case '(': paren.push(c); break;
case '{': paren.push(c); break;
case '[': paren.push(c); break;
case ')': if (paren.empty() || paren.top()!='(') return false; else paren.pop(); break;
case '}': if (paren.empty() || paren.top()!='{') return false; else paren.pop(); break;
case ']': if (paren.empty() || paren.top()!='[') return false; else paren.pop(); break;
default: ; // pass
}
}
return paren.empty() ;
}
};

python

class Solution:
def isValid(self, s):
stack = []
dict = {"]":"[", "}":"{", ")":"("}
for char in s:
if char in dict.values():
stack.append(char)
elif char in dict.keys():
if stack == [] or dict[char] != stack.pop():
return False
else:
return False
return stack == []

leetcode 1-20 easy的更多相关文章

  1. 【LeetCode算法-20】Valid Parentheses

    LeetCode第20题 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determin ...

  2. LeetCode:20. Valid Parentheses(Easy)

    1. 原题链接 https://leetcode.com/problems/valid-parentheses/description/ 2. 题目要求 给定一个字符串s,s只包含'(', ')',  ...

  3. [Leetcode][Python]20: Valid Parentheses

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 20: Valid Parentheseshttps://oj.leetcod ...

  4. leetcode contest 20

    Q1: 520. Detect Capital Given a word, you need to judge whether the usage of capitals in it is right ...

  5. 【一天一道LeetCode】#20. Valid Parentheses

    一天一道LeetCode系列 (一)题目 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...

  6. LeetCode第[20]题(Java):Valid Parentheses

    题目:有效的括号序列 难度:Easy 题目内容: Given a string containing just the characters '(', ')', '{', '}', '[' and ' ...

  7. LeetCode(20):有效的括号

    Easy! 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭 ...

  8. 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  9. 【Leetcode】【Easy】String to Integer (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  10. 【Leetcode】【Easy】Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

随机推荐

  1. java基础之完数判断

    完数: 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的因子之和,则称该 ...

  2. java浮点运算的陷阱

    首先呢,i你要明白double和float. Inifinity: 例如:syso(5.0/0.0+" 和"+0.0 /0.0); 浮点运算的0.0不是真正意义上的0,而是非常接近 ...

  3. drools跳转出现错误问题(400)

    400 Sorry, a technical error occurred. Please contact a system administrator. 今天drools的管理平台tomcat部署完 ...

  4. Python开发利器Pycharm

    可以新建项目的时候,在下面的小扳手那里创建虚拟化环境.若想安装包,直接file->setting里面找到对应项目,然后添加新的包即可.   视频地址:http://edu.51cto.com/c ...

  5. 【codeforces 505C】Mr.Kitayuta,the Treasure Hunter

    [题目链接]:http://codeforces.com/problemset/problem/505/C [题意] 一开始你跳一步长度为d; 之后你每步能跳d-1,d,d+1这3种步数; 然后在路上 ...

  6. (转)AngularJS中使用的表单验证

    原文  http://www.cnblogs.com/woshinidezhu/p/Form-validation-with-AngularJS.html 客户端表单验证是AngularJS里面最酷的 ...

  7. ArcGIS中线转面

    1. 打开ArcMap用Add Data加载shp Polyline线文件. 2. 选Editor编辑\Start Editing开始编辑. 3. 选Editor编辑\More Editing Too ...

  8. SPSS统计分析案例:无空白列重复正交试验设计方差分析

    SPSS统计分析案例:无空白列重复正交试验设计方差分析 前面有讲过 SPSS正交试验设计及其方差分析 一篇文章,包含了一个典型的正交试验案例.然而在实际应用当中,主观客观条件复杂多变,在试验设计中就要 ...

  9. 855. Exam Room

    维护一个数据结构要满足:一个教室线性排列的座位 0 ... N-1 调用seat 入座一个距离最近学生最远的座位 调用leave x 离座一个位置为x的学生 由于N最多是 10e9 所以选择维护 学生 ...

  10. hbase设计方案1

    好的方案应该挺多的,比如:可以将[日.周.月]以3,2,1来表示(拼接到ROW_KEY中){离线跑job时候,可以分为月job(每月末run一下,周job(每周末run一下),日job(每天run一下 ...