ARTS Week 3
每周完成一个ARTS:
1.Algorithm:每周至少做一个 leetcode 的算法题
2.Review:阅读并点评至少一篇英文技术文章
3.Tip:学习至少一个技术技巧
4.Share:分享一篇有观点和思考的技术文章
Algorithm
#include <math.h>
#include <string>
class Solution {
public:
int myAtoi(string str) {
long long max = pow(2,31)-1;
long long min = pow(-2,31);
long long result = 0;
int flag = 1;
bool bflag = false; //是否找到数字串
int iSize = str.length();
for(int i = 0;i<iSize;i++){
char tmp = str.at(i);
if(tmp == ' ' && !bflag){
continue;
}
if(!bflag){
if(tmp =='+')
{
flag = 1;
bflag = true;
continue;
}
if(tmp =='-' ){
flag = -1;
bflag = true;
continue;
}
if(tmp>='0' && tmp <='9'){
int num = tmp - '0';
result =result*10 +num;
bflag = true;
continue;
}
break;
}
if(bflag){
if(tmp>='0' && tmp <='9'){
int num = tmp - '0';
result =result*10 +num;
if(result > max){
if(flag == 1){
return max;
}
else
return min;
}
}
else
break;
}
}
result = flag*result;
return result;
}
};
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
if(x<10)
return true;
int iSize = 0;
int a[20] = {0};
while(x){
a[iSize] = x%10;
x = x/10;
iSize++;
}
for(int i = 0;i<=iSize/2;i++){
if(a[i] != a[iSize-i-1]){
return false;
}
}
return true;
}
};
Review
本周Review一篇stackoverflow上的问答
What is going on with ‘gets(stdin)’ on the site coderbyte?
题主在一个答题网站CoderByte上做题是对传入参数的调用方法gets(stdin)产生了怀疑。下面那行代码应该是编译不过的,却在CoderByte的网页上完美运行,它的后台到底做了什么?
int FirstFactorial(int num);
cout << FirstFactorial(gets(stdin));
网站的创始人回答了这个疑问:
在我第一次创建网站的那天(大约在2012年),它只支持JavaScript。在浏览器中运行的JavaScript中无法“读入输入”,因此会有一个函数foo(输入),我使用Node.js中的readline()函数来调用它就像foo(readline()) 。当时我还没那么厉害,并且不知道更好,所以我确实在运行时用输入替换了readline()。所以foo(readline())变成了foo(2)或foo(“hello”),使它适用于JavaScript。
在2013/2014左右,我添加了更多语言并使用第三方服务来在线评估代码,但是使用我正在使用的服务进行stdin / stdout非常困难,所以我坚持使用同样愚蠢的查找和替换语言像Python,Ruby,最后是C ++,C#等。
等到了今天,我在自己的容器中运行代码,但从未更新stdin / stdout的工作方式,因为人们已经习惯了奇怪的黑客攻击(有些人甚至在论坛中发布了解释如何绕过它)。
我知道这不是最佳实践,对于学习新语言的人来说看到这样的黑客没有帮助,但想法是让新程序员根本不用担心读取输入而只关注编写算法来解决问题。几年前关于编码挑战站点的一个常见抱怨是,新程序员会花费大量时间来确定如何从文件读取或从文件中读取行,因此我希望新编码器能够避免在Coderbyte上出现此问题。
我将很快更新整个编辑器页面以及语言的默认代码和标准输入。希望C ++程序员更喜欢使用Coderbyte
想当年我刷机考题时确实也因为读取输入而头疼,这种为了新人考虑的行为值得称赞,但是错误的代码完美运行带来的误导又该怎样解除呢?
Tips
《代码大全》中提到的编程风格。
编程风格:
你的个人性格直接影响你编写计算机程序的能力。
最有明显作用的性格为:谦虚、好奇心、诚实、创造性和纪律,还有文明的“懒惰”。
高级程序员的发展和生成与天才并无多大联系,任何事情都和个人的发展有关。
令人吃惊的是,小聪明、经验、坚持和欲望既可帮助你也能妨碍你。
许多程序员不主动去吸收新信息和新技术,而是靠偶然地上获得一些新信息,如果你抽出少量时间学习别人的编程经验,过一段时间后,你将在你的同行中脱颖而出。
好的性格对养成良好习惯有很大影响。
为了成为一位高水平的程序员,你应养成良好的习惯,其余的就会随之而来。
Share
本周分享一篇读书心得程序员的职业素养
顺便推荐一部网飞的纪录片,our planet。特别漂亮,可以说每一帧都是壁纸。