概述
1.出栈顺序
已知某一个字母序列,把序列中的字母按出现顺序压入一个栈,在入栈的任意过程中,允许栈中的字母出栈,求所有可能的出栈顺序
算法:
1.首先我们对输入的字母序列进行字符的全排列(通过递归)
2.然后在得到每一种排列的时候对其进行检验,判断是否为输入字母序列的弹出序列。
2.字符串解析
以下函数解析字符串str是否合法的C语言字符串字面值定义(不考虑八进制和十六进制字符编码),如果是,则将解码后的内容保存到buf中,并返回0,否则返回-1。比如,"hello “sangfor”"解码后结果为hello “sangfor”。
算法:输入的字符串中,"占两个字符,不是代表转义字符,因此我们遍历输入字符串,将转义字符辨别出来,以一个字符的形式保存到输出字符串中即可。
注意:1.虽然在输入字符串中,,’,“都占一个字符的位置,要想判断该字符是否为这三种,必须用if(*str==’’||*str==’’’||*str==’”’),即前面加斜杠
2.C语言中没有bool函数,用int的0,1来代替。
3.集合遍历
有K种颜色的小球(K<=10),每种小球有若干个,总数小于100个。
现在有一个小盒子,能放N个小球(N<=8),现在要从这些小球里挑出N个小球,放满盒子。
想知道有哪些挑选方式。注:每种颜色的小球之间没有差别。
请按数字递增顺序输出挑选小球的所有方式。
如有3种颜色,每种颜色小球的个数分别为a:1,b:2,c:3,挑出3个小球的挑法有:
003,012,021,102,111,120
算法:采用递归的方式即可。
注意:迭代层数过多时通常用递归来代替。
4.IP段合并
一个数字段由首尾两个数字标识,表示一个自然数集合,
比如数字段[beg, end)表示从beg到end之间的所有自然数,
包含beg,但不包含end。
有若干个数字段,这些数字段之间可能有重叠,
怎么把这些数字段合并去重,用最少个数的数字段来表示。
合并前后,整个集合包含的数字不发生变化。
算法:
1.先将各个IP段按beg从小到大排序,如果两个IPbeg一样,就按end从小到大排序
2.每个IP只需和其上一个进行比较即可, 如果可以合并就合并,不行就将此IP作为新的段推入结果中。
注意:自定义类型的排序需要自定义排序函数。
最后
以上就是烂漫白昼为你收集整理的牛客网刷题总结(一)的全部内容,希望文章能够帮你解决牛客网刷题总结(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复