第一道:
只使用一个if语句将一个整数之前的所有正整数存到一个字符串中,同时,3的倍数改为fizz,5的倍数为buzz,既是3的倍数又是5的倍数存fizz buzz。
说只能使用一个if语句,所以怎么判断是否为3的倍数,5的倍数就成了问题。
(感觉不能用else if吧,要是能用直接判断就好)
想到了用循环,核心思想是,每三次改为fizz,然后用一个if判断是否为5的倍数。
但是在写的过程中发现。。。。。。
while语句有判断的功能啊...
于是:
vector<string> fizzBuzz(int n)
{
vector<string> a(n);
int x=1;
while(x<=n)
{
while(x%3!=0&&x%5!=0&&x<=n)
{
a[x-1]=to_string(x);
x++;
}
while(x%3==0&&x%5==0&&x<=n)
{
a[x-1]="fizz buzz";
x++;
}
while(x%3!=0&&x%5==0&&x<=n)
{
a[x-1]="buzz";
x++;
}
while(x%3==0&&x%5!=0&&x<=n)
{
a[x-1]="fizz";
x++;
}
}
return a;
}
感觉有点..投机取巧?,提交了 AC了...
第二道:
从一个字符串中找另一个字符串,找到了返回1,没找到返回-1.
挑战说O(n^2)是可接受的,但是可以O(n)吗,还提示KMP算法....
先写一个暴力的:
int strStr(const char *s, const char *p) {
if(s==NULL)
return -1;
if(p==NULL)
return -1;
int sLen = strlen(s);
int pLen = strlen(p);
int i = 0;
int j = 0;
while (i < sLen && j < pLen)
{
if (s[i] == p[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}
}
if (j == pLen)
return i-j;
else
return -1;
}
提交了,AC了.
然后去看了KMP算法...
花了不少时间了解了算法,但是关于算法中next数组的求法还不是很熟悉。
由于时间不够,匆忙之中写下博客,明天继续..
争取完成时间复杂度O(n)的
ps:了解后KMP算法的时间复杂度其实是O(m+n).......