leetcode 刷题日志 2018-03-26
58. 最后一个单词的长度
分析:找最后一个非空格,向前找
int lengthOfLastWord(string s) {
int i = s.find_last_not_of(' ');
int j = i;
for(;j >= ; j--){
if(s[j] == ' ')
break;
}
return i - j;
}
7. 颠倒整数
分析:注意题意,超范围 LL ,结尾去0
int reverse(int x) {
long long res = ;
if(x!=){
while(!x%){
x /= ;
}
}
while(x){
res *= ;
res += x % ;
x /= ;
}
if(res> INT_MAX || res < -INT_MAX){
res = ;
}
return res;
}
13. 罗马数字转整数
分析:罗马数字共有7个,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。按照下述的规则可以表示任意正整数。需要注意的是罗马数字中没有“0”,与进位制无关。一般认为罗马数字只用来记数,而不作演算。
字母对应数字相加,后面字母比前面字母大代表前面字母需要减去
被减的字母最多一个!
int singleCharToInt(char x){
int num = -;
if(x == 'i')
num = ;
else if(x == 'v')
num = ;
else if(x == 'x')
num = ;
else if(x == 'l')
num = ;
else if(x == 'c')
num = ;
else if(x == 'd')
num = ;
else if(x == 'm')
num = ;
return num;
}
int romanToInt(string s) {
int len = s.size();
transform(s.begin(), s.end(), s.begin(), ::tolower);
int res = ;
for(int i=;i<len;i++){
int num=singleCharToInt(s[i]);
if(singleCharToInt(s[i+]) > num){
num=(-)*num;
}
res += num;
}
return res;
}
38. 数数并说
分析:步步迭代
整数字符串转换
string fun(string s){
string tmp = "";
int len = s.size();
int con =;
char t ;
for(int i=;i<len;){
t=s[i++];con = ;
while(s[i] == t){
con++; i++;
}
ostringstream stream;
stream<<con; //n为int类型
tmp =tmp + stream.str();
tmp+=t;
}
return tmp;
}
string countAndSay(int n) {
string s="";
int en = s.size();
int con =;
while(--n){
s=fun(s);
//cout<<s<<endl;
}
return s;
}
67. 二进制求和
分析:对齐,相加,首位进位处理
string addBinary(string a, string b) {
//对齐
int lena = a.size(), lenb = b.size();
int n = abs(lena - lenb);
string tmp(n,'');
if(lena < lenb) { a = tmp + a; }
if(lena > lenb) { b = tmp + b; }
//加法
int len = a.size();
int x = , c = ; // 计算结果,进位标记
for(int i = len - ; i >= ; --i){
x = a[i] - '' + b[i] -'' + c;
if( x > ){
c = ;
x -= ;
}
else{
c = ;
}
a[i] = (char)('' + x );
}
if(c) //首部进位
a = "" + a;
return a;
}
14. 最长公共前缀
分析:拿第一个字符串作为标准,遍历所有字符串,期间不断缩小条件
string longestCommonPrefix(vector<string>& strs) {
int len = strs.size(),lenS = ;
if( == len)
return "";
string s = strs[];
for(int i=; i<len; ++i){
lenS = s.length();
for(int j=; j<lenS; ++j){
if(s[j] != strs[i][j]){
s = s.substr( , j); //对比所有字符串,不断缩减条件
break;
}
}
}
return s;
}
20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
括号必须以正确的顺序关闭,"()" 和 "()[]{}" 是有效的但是 "(]" 和 "([)]" 不是。
分析:栈的应用
我用的比较别扭
每次压入一个字符,深入栈内看是否还有配对成功的括号可以弹出
最终所有配对成功的话,栈为空
bool isValid(string s) {
stack<char> stack_tmp;
int len = s.length();
char x,y;
stack_tmp.push(s[]);
for(int i=; i<len; i++){
stack_tmp.push(s[i]);
while(stack_tmp.size()>=){ //要想配对成功,至少有两个
y = stack_tmp.top();
stack_tmp.pop();
x = stack_tmp.top(); //取两数
if(')' == y && x == '('){
stack_tmp.pop();
}
else if('}' == y && x == '{'){
stack_tmp.pop();
}
else if(']' == y && x == '['){
stack_tmp.pop();
}
else{
stack_tmp.push(y); //不行,再压回去
break;
}
}
}
return stack_tmp.empty();
}
29. 两数相除
不使用乘号,除号和取模符号将两数相除。如果溢出返回 MAX_INT。
感谢:https://www.liuchuo.net/archives/3140
//1. 利用 a/b = exp(log(a)-log(b)) //注意定义域>0 需取绝对值,并抽取符号位(抑或运算用的巧妙)
//2. 注意越界情况,可能分母==0 可能负数反号
int divide(int dividend, int divisor) {
if(divisor == || dividend == INT_MIN && divisor == -) return INT_MAX; //溢出两种情况
int sign = ((dividend >> ) ^ (divisor >> )) == ? : -; //符号位 判断
long a = abs((long)dividend);
long b = abs((long)divisor);
double c = exp(log(a) - log(b)) + 0.0000000001;
return (int)(sign * c);
}
125. 验证回文字符串
给定一个字符串,确定它是否是回文,只考虑字母数字字符和忽略大小写。
例如:"A man, a plan, a canal: Panama" 是回文字符串。"race a car" 不是回文字符串。
注意:
你有考虑过这个字符串可能是空的吗? 在面试中这是一个很好的问题。
针对此题目,我们将空字符串定义为有效的回文字符串。
分析:空串处理、提取主要字符串、双向搜索判断
bool isPalindrome(string s) {
if (""== s) return true; //1. deal with empty string
int len = s.length();
string tmp="";
for(int i=; i <len; i++){ //2. filter string
if(s[i]>='A' &&s[i]<='Z'){
tmp +=s[i] +;
}
if((s[i]>='a'&& s[i]<='z') ||(s[i] >='' &&s[i] <='')){
tmp +=s[i];
}
}
len = tmp.length();
int m = (len +)/;
for (int i=; i <= m; i++) { //3. Bidirectional search
if(tmp[i] != tmp[len -i -])
return false;
}
return true;
}
leetcode 刷题日志 2018-03-26的更多相关文章
- leetcode 刷题日志 2018-3-28
树: 404. 左叶子之和 求所有左叶子结点之和 . 递归法 分析:递归法遍历结点,找左叶子结点 空指针判断 有左子节点?是叶子结点?是的话更新value的值 int sumOfLeftLeaves( ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- C#LeetCode刷题-设计
设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制 33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索 ...
- C#LeetCode刷题-排序
排序篇 # 题名 刷题 通过率 难度 56 合并区间 31.2% 中等 57 插入区间 30.4% 困难 75 颜色分类 48.6% 中等 147 对链表进行插入排序 50.7% 中等 ...
- C#LeetCode刷题-贪心算法
贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配 17.8% 困难 45 跳跃游戏 II 25.5% 困难 55 跳跃游戏 30.6% 中等 122 买卖股票的最佳时机 II C ...
- C#LeetCode刷题-栈
栈篇 # 题名 刷题 通过率 难度 20 有效的括号 C#LeetCode刷题之#20-有效的括号(Valid Parentheses) 33.0% 简单 42 接雨水 35.6% 困难 71 简 ...
- C#LeetCode刷题-动态规划
动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串 22.4% 中等 10 正则表达式匹配 18.8% 困难 32 最长有效括号 23.3% 困难 44 通配符匹配 17.7% ...
- C#LeetCode刷题-二分查找
二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...
随机推荐
- 互评Alpha版本 - Hello World团队项目空天猎
在测评该项目时,我找到了Hello World!团队的git,并下载了相关文件以及阅读了程序运行说明. 如图所示,我下载了一个名为 SkyHunter1.0.rar 的压缩文件包,文件包内容如下: 根 ...
- C++ Primer Plus学习:第十三章
第十三章 类继承 继承的基本概念 类继承是指从已有的类派生出新的类.例: 表 0-1 player.h class player { private: string firstname; string ...
- 单机安装 consul ui 对外提供服务
Consul 安装启动ui,外网无法访问,应为Consul 默认绑定127.0.0.1 ,所以外网无法访问. 通过设置 -client 参数来设置 consul agent -server - ...
- 技嘉主板+AMD CPU开启CPU虚拟化方法
硬件环境:技嘉AB350+AMD Ryzen 5 1600X 由于安装虚拟机的需要,所以要开启CPU的虚拟化. 首先进入BIOS. 然后如图:(M.I.T-高级频率设定-CPU超频进阶设置-SVM M ...
- 三层神经网络自编码算法推导和MATLAB实现 (转载)
转载自:http://www.cnblogs.com/tornadomeet/archive/2013/03/20/2970724.html 前言: 现在来进入sparse autoencoder的一 ...
- 【week10】规格说明书练习-吉林市1日游
假设我们全班同学及教师去吉林省吉林市1日游,请为这次活动给出规格说明书. 版本:1.0 编订:于淼 团队:2016级计算机技术全体同学 日期:2016/11/19 1.引言 1.1 编写目的 1.2 ...
- [翻译]API Guides - Service
官方文档原文地址:http://developer.android.com/guide/components/services.html Service是应用程序组件之一,它并不提供一个用户界面,可以 ...
- 服务器控件的异步请求——UpdatePanel和ScriptManager
aspx文件里面有以下一段代码 <body> <form id="form1" runat="server"> <div> ...
- BER-TLV数据结构【转】
转自:https://www.cnblogs.com/SCPlatform/p/5076935.html 为了便于后文的引用说明,先列出一段TLV结构的数据: [6F] 4D │ ├─[84] 07 ...
- 我的 MyBatis 实现的 Dao 层
学了 Mybatis 之后,发现用 Mybatis 写 Dao层实在是简便多了,主要是在表的映射这块简单了很多.下面是我实现的使用 Mybatis 实现的简单的操作用户表的 Dao 层. 使用 Myb ...