2. Add Two Numbers(中等)

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* first = l1;
ListNode* second = l2;
int result1=,result2=;
long long result=;
stack<int> S;
int count=; while(l1 != NULL){
S.push(l1->val);
l1 = l1->next;
} count = S.size()-;
while(!S.empty()){
result1 += pow(,count--) * S.top();
S.pop();
} while(l2 != NULL){
S.push(l2->val);
l2 = l2->next;
} count = S.size()-;
while(!S.empty()){
result2 += pow(,count--) * S.top();
S.pop();
} result = result1 + result2;
delete first,second; // ListNode*p = new ListNode(-1); //头节点
ListNode* pHead = NULL;
ListNode* p = pHead; if(!result){
ListNode* q = new ListNode();
pHead = q;
}
while(result){
int val = result % ;
result /= ; ListNode* q = new ListNode(val);
if(pHead == NULL){
pHead = q;
p = q;
}
else{
p->next = q;
p = p->next;
}
}
return pHead;
}
};

此方法会溢出,超过long long 型范围

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {   //正确解法,按位相加,注意进位
ListNode *head = NULL, *prev = NULL;
int carry = ;
while (l1 || l2) {
int v1 = l1? l1->val: ;
int v2 = l2? l2->val: ;
int tmp = v1 + v2 + carry;
carry = tmp / ;
int val = tmp % ;
ListNode* cur = new ListNode(val);
if (!head) head = cur;
if (prev) prev->next = cur;
prev = cur;
l1 = l1? l1->next: NULL;
l2 = l2? l2->next: NULL;
}
if (carry > ) {
ListNode* l = new ListNode(carry);
prev->next = l;
}
return head;
}

3, Longest Substring Without Repeating Characters.(很慢)

int lengthOfLongestSubstring(string s) {

    int maxLength = ;
int count;
for(int i=;i<s.length();i++){
string currString = "";
count = ;
for(int j=i;j<s.length();j++){
if(currString.find(s[j])>=currString.length()){
currString += s[j];
count++;
cout<<s[j]<<endl;
cout<<"string:"<<currString<<endl;
if(count>maxLength) maxLength = count;
}
else{
break;
}
}
}
return maxLength;
}

5, Longest Palindromic Substring.(很慢)

string longestPalindrome(string s) {
string maxString = "";
int maxLength = ;
int count = ; for(int i=;i<s.length();i++){
string Str = "";
int index = s.rfind(s[i]);
int start = i;
int end = index;
int count = ;
int ii=start; while(ii<=index){
if(s[ii]==s[index]){ii++;index--;}
else{
ii = start;
index = end-;
end--;
} //匹配失败
} if(ii>index){ //匹配成功
for(int k=start;k<=end;k++)
Str += s[k];
count = Str.length();
}
if(count>=maxLength) {maxString = Str;maxLength=count;}
}
return maxString;
}

8. String to Integer (atoi)(中等,参考)

int myAtoi(string str) {
long result = ;
int indicator = ;
for(int i = ; i<str.size();)
{
i = str.find_first_not_of(' ');
if(str[i] == '-' || str[i] == '+')
indicator = (str[i++] == '-')? - : ;
while(''<= str[i] && str[i] <= '')
{
result = result* + (str[i++]-'');
if(result*indicator >= INT_MAX) return INT_MAX;
if(result*indicator <= INT_MIN) return INT_MIN;
}
return result*indicator;
}
return ;
}

15,3Sum(中等)

    vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
int sum;
sort(nums.begin(),nums.end());
for(int i=;i<nums.size();i++){
if(i> && nums[i]==nums[i-])
continue;
int l=i+;
int r=nums.size()-; while(l<r){
sum = nums[i]+nums[l]+nums[r];
if(sum<) l++;
else if(sum>) r--;
else{
res.push_back(vector<int>{nums[i],nums[l],nums[r]});
while(nums[l]==nums[l+]) l++; //去除重复
while(nums[r]==nums[r-]) r--;
l++;
r--;
}
} }
return res;
}

11. Container With Most Water(很慢)

    int maxArea(vector<int>& height) {
int maxAreas=;
int currAreas=;
for(int i=;i<height.size();i++){
for(int j=i+;j<height.size();j++){
currAreas = (j-i)*min(height[i],height[j]);
if(currAreas>maxAreas) maxAreas = currAreas;
}
}
return maxAreas;
}

12. Integer to Roman(中等)

    string intToRoman(int num) {
const string THOUS[]={"","M","MM","MMM"};
const string HUNDS[]= {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
const string TENS[]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
const string ONES[]={"","I","II","III","IV","V","VI","VII","VIII","IX"}; string result = "";
result += THOUS[num/]; num %= ;
result += HUNDS[num/]; num %= ;
result += TENS[num/]; num %= ;
result += ONES[num%]; return result;
}

16. 3Sum Closest(较快)

    int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int minDist=INT_MAX;
int res=;
for(int i=;i<nums.size();i++){
int l=i+;
int r=nums.size()-;
while(l<r){
int sum = nums[i]+nums[r]+nums[l];
if(sum==target) return sum;
if(abs(sum-target)<minDist) {res=sum;minDist=abs(sum-target);}
if(sum>target) r--;
else l++;
}//while
}
return res;
}
};

17. Letter Combinations of a Phone Number(较快)

    vector<string> letterCombinations(string digits) {
if(digits.empty()) return vector<string>();
vector<string> result;
result.push_back("");
vector<string> src = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
for(int i=;i<digits.size();i++){
int num = digits[i]-'';
if(num< || num>) break;
const string& candidate = src[num];
if(candidate.empty()) continue;
vector<string> tmp;
for(int j=;j<candidate.size();j++){
for(int k=;k<result.size();k++)
tmp.push_back(result[k]+candidate[j]);
}
result.swap(tmp);
}
return result;
}

19. Remove Nth Node From End of List(中等)

    ListNode* removeNthFromEnd(ListNode* head, int n) {
if(head == NULL) return NULL;
ListNode* after=head;
ListNode* befor=head;
ListNode* toBeDelete; for(int i=;i<n;i++){
befor = befor->next;
if(befor==NULL) return head->next;
} while(befor->next!=NULL){
befor = befor->next;
after = after->next;
} toBeDelete = after->next;
after->next = toBeDelete->next;
delete toBeDelete;
toBeDelete = NULL; return head;
}

22. Generate Parentheses(中等)

    vector<string> res;
void helper(string str,int left,int right){
if(left== && right==) res.push_back(str);
if(left!=) helper(str+'(',left-,right);
if(right!= && right>left) helper(str+')',left,right-);
} vector<string> generateParenthesis(int n) {
helper("",n,n);
return res;
}

24. Swap Nodes in Pairs(较快)

    ListNode* swapPairs(ListNode* head) {
if(head==NULL) return NULL;
ListNode tmp();
ListNode* curr=head;
ListNode* pre=&tmp;
tmp.next=head; while(curr && curr->next){
pre->next=curr->next;
pre=pre->next;
curr->next=pre->next;
pre->next=curr;
pre=curr;
curr=curr->next;
}
return tmp.next;
}

leetcode 中等题(1)的更多相关文章

  1. leetcode 中等题(2)

    50. Pow(x, n) (中等) double myPow(double x, int n) { ; unsigned long long p; ) { p = -n; x = / x; } el ...

  2. LeetCode中等题(三)

    题目一: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m ...

  3. LeetCode中等题(一)

    题目一: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  4. leetcode中等题

    # Title Solution Acceptance Difficulty Frequency     1 Two Sum       44.5% Easy     2 Add Two Number ...

  5. LeetCode中等题(二)

    题目一: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复 ...

  6. 这样leetcode简单题都更完了

    这样leetcode简单题都更完了,作为水题王的我开始要更新leetcode中等题和难题了,有些挖了很久的坑也将在在这个阶段一一揭晓,接下来的算法性更强,我就要开始分专题更新题目,而不是再以我的A题顺 ...

  7. LeetCode刷题笔记和想法(C++)

    主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...

  8. leetcode刷题指南

    转载自:http://blog.csdn.net/lnho2015/article/details/50962989 以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目 ...

  9. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

随机推荐

  1. python3下安装Selenium插件和驱动

    import sysimport osimport shutilimport time os.system('pip install selenium') file_name="IEDriv ...

  2. a标签自执行点击事件

    //html <a href='http://www.baidu.com' ><button id='sss'>百度</button></a> //原生 ...

  3. 转载 :实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)

    在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...

  4. subprocess.Popen模块

    该类用于在一个新的进程中执行一个子程序.subprocess模块底层的进程创建和管理是由Popen类来处理的. 1.subprocess.Popen的构造函数 class subprocess.Pop ...

  5. android的特点有哪些

    android拥有完善的应用程序框架,支持4大应用组件activity,service,contentProvider,broadcast,可以在任意层次上进行复用和更换: android中java字 ...

  6. Java工具类DateFormatUtils详解

    日期和时间格式化实用程序和常量public static String format(Calendar calendar, String pattern) 说明:将日历格式化为特定的模式:参数:cal ...

  7. js 编写一个神奇的四则运算

    写一个算法,有时候可以用简单的方法就可以写出来,但是只能针对特定的环境,如果要能够适应不同的环境,就需要对算法进行优化,在优化的过程中,你会觉得非常神奇,下面来看一个简单的四则运算的算法编写方式: 1 ...

  8. servlet路径获取

    本文章主要讨论以下几种request获取路径的方法: request.getServletPath() request.getPathInfo() request.getContextPath() r ...

  9. java split函数结尾空字符串被丢弃的问题

    参考: http://yinny.iteye.com/blog/1750210 http://www.xuebuyuan.com/1692988.html java中的split函数用于将字符串分割为 ...

  10. PHP面向对象(抽象类与抽象方法、接口的实现)

    一.抽象类与抽象方法 1,任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的. 2,定义为抽象的类不能被实例化. 3, 被定义为抽象的方法只是声明了其调用方式(参数) ...