0%

  • 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。如果当前字符流没有存在出现一次的字符,返回#字符。
  • 分析:这道题还是很简单的。将字节流保存起来,通过哈希表统计字符流中每个字符出现的次数,顺便将字符流保存在string中,然后再遍历string,从哈希表中找到第一个出现一次的字符。
  • C++代码:
阅读全文 »

  • 题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
  • 分析:[sign]integral-digits[.[fractional-digits]][e|E[sign]exponential-digits]
阅读全文 »

  • 题目:请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但是与”aa.a”和”ab*a”均不匹配

  • 分析:

  • 当模式中第二个字符不是*,若字符串对应的字符与模式中对应的字符匹配(相同或者模式中为.),字符串和模式各向后移动一个字符,然后匹配剩余的字符串和模式。否则直接返回False

  • 当模式中第二个字符为*,①模式直接向后移动两个字符,②字符串对应的字符与模式中对应的字符匹配,字符向后移动一个,模式可以保持不动或者向后移动两个

  • C++代码:

阅读全文 »

  • 题目:给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]A[i-1]*A[i+1]…*A[n-1]。不能使用除法。
  • 分析:观察下公式,你会发现,B[i]公式中没有A[i]项,也就是说如果可以使用除法,就可以用公式B[i]=A[0]A[1]…..*A[n-1]/A[i]来计算B[i],但是题目要求不能使用,因此我们只能另想办法。
阅读全文 »

  • 题目:在一个长度为 n 的数组里的所有数字都在 0 到 n - 1 的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为 7 的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字 2。
  • 分析:这道题是基于这样的考虑: 如果数组中没有重复元素, 那么在排序的情况下, i 与 A[i] 是要一一对应的, 比如:
阅读全文 »

  • 题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

  • 输入描述:

输入一个字符串,包括数字字母符号,可以为空

  • 输出描述:

如果是合法的数值表达则返回该数字,否则返回0

1
2
3
4
5
6
7
8
9
10
11
12
13
示例1

输入

+2147483647

1a33

输出

2147483647

0
阅读全文 »

  • 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
  • 分析:首先看十进制是如何做的: 5+7=12,

可以使用三步走:

第一步:相加各位的值,不算进位,得到2。

第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。

第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。 同样我们可以

阅读全文 »

  • 题目:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
  • 分析:递归!
  • C++代码:
1
2
3
4
5
6
7
8
9
class Solution {
public:
int Sum_Solution(int n) {
int ans = n;
// &&就是逻辑与,逻辑与有个短路特点,前面为假,后面不计算。即递归终止条件
ans && (ans += Sum_Solution(n - 1));
return ans;
}
};

  • 题目:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)
  • 分析:如果只求最后一个报数胜利者的话,我们可以用数学归纳法解决该问题,为了讨论方便,先把问题稍微改变一下,并不影响原意:
阅读全文 »

  • 题目:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张😊)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何。为了方便起见,你可以认为大小王是0。
  • 分析:这题说了一堆,提取主要信息,我们不难整理出,满足如下条件才可以认为是顺子:
阅读全文 »