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. Python中实现对list做减法操作介绍

    Python中实现对list做减法操作介绍 这篇文章主要介绍了Python中实现对list做减法操作介绍,需要的朋友可以参考下 问题描述:假设我有这样两个list, 一个是list1,list1 = ...

  2. LocalSessionFactoryBean有几个属性查找hibernate映射文件

    LocalSessionFactoryBean有几个属性查找hibernate映射文件: mappingResources.mappingLocations.mappingDirectoryLocat ...

  3. visio去除直线交叉处的歪曲

    1 问题描述 Visio画图时,两根直线交叉时,总是默认会出现一个跨线的标志,如下图所示: 2 解决办法 在2007前的版本,可以通过以下方式解决: 选中线条,然后菜单的格式->行为->连 ...

  4. javascript 解析ajax返回的xml和json格式的数据

    写个例子,以备后用 一.JavaScript 解析返回的xml格式的数据: 1.javascript版本的ajax发送请求 (1).创建XMLHttpRequest对象,这个对象就是ajax请求的核心 ...

  5. 7.Spring切入点的表达式和通知类型

    1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...

  6. Flannel部署

    目录 Flannel CNI集成 配置Docker使用Flannel 1.为Flannel生成证书 [root@linux-node1 ~]# cd /usr/local/src/ssl/ [root ...

  7. BZOJ 2683: 简单题(CDQ 分治)

    题面 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: ...

  8. 编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成

    编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成.“组合 ”的规则如下: 1). str中的每个字母要么来自于part1,要么来自于part2 ...

  9. 留下来做项目经理还是跳槽学Java

    毕业两年了,曾经给自己计划工作两年后跳一次槽,去尝试学习更多的东西.2012年7月5日入职,现在整整两年,最近面临这样的一个抉择:是留在公司继续做项目经理,还是跳槽去学习Java. 我的基本情况:本科 ...

  10. 页面自动执行(加载)js的几种方法

    https://www.cnblogs.com/2huos/p/js-autorun.html 一.JS方法1.最简单的调用方式,直接写到html的body标签里面: <html> < ...