Go程序员面试分类模拟题14.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Go程序员面试分类模拟题14

论述题

1.?题目描述:??

??给定一个如下格式的字符串:(1,(2,3),(4,(5,6),7)),括号内的元素可以是数字,也可以是另一个括号,实现一个算法消除嵌套的括(江南博哥)号,例如把上面的表达式变成(1,2,3,4,5,6,7),如果表达式有误,则报错。

正确答案:

从问题描述可以看出,这道题要求实现两个功能:一是判断表达式是否正确,二是消除表达式中嵌套的括号。对于判定表达式是否正确这个问题,可以从如下几个方面来入手:首先,表达式中只有数字、逗号和括号这几种字符,如果有其他的字符出现,则是非法表达式。其次,判断括号是否匹配,如果碰到‘(’,则把括号的计数器的值加上1;如果碰到‘)’,那么判断此时计数器的值,如果计数器的值大于1,则把计数器的值减去1,否则为非法表达式,当遍历完表达式后,括号计数器的值为0,则说明括号是配对出现的,否则括号不配对,表达式为非法表达式。对于消除括号这个问题,可以通过申请一个额外的存储空间,在遍历原字符串的时候把除了括号以外的字符保存到新申请的额外的存储空间中,这样就可以去掉嵌套的括号了。需要特别注意的是,字符串首尾的括号还需要保存。实现代码如下:

??packagemain

??import(

??bytes

??fmt

??//去掉字符串中嵌套的括号

??funcremoveNestedPare(strstring)string{

??arr:=[]rune(str)

??Parentheses_num:=0??/用来记录不匹配的“(”出现的次数

??ifarr[0]!=(||arr[len(arr)-1]!=){

??return

??}

??varbufbytes.Buffer

??buf.WfiteRune(()

??//字符串首尾的括号可以单独处理

??for_,v:=rangearr{

??switchv{

??case(:

??Parentheses_num++

??case):

??Parentheses_num--

??default:

??buf.WriteRune(v)

??}

??}

??//判断括号是否匹配

??ifParentheses_num!=0{

??fmt.Println(由于括号不匹配,因此不做任何操作)

??return

??}

??//处理字符串结尾的)

??bur.WriteRune())

??returnbuf.String()

??}

??funcmain(){??

??str:=(1,(2,3),(4,(5,6),7))

??fmt.Printf(%v去除嵌套括号后为:%v,str,removeNestedPare(str))

??}

??程序的运行结果为

??(1,(2,3),(4,(5,6),7))去除嵌套括号后为:(1,2,3,4,5,6,7)

??算法性能分析:

??这种方法对字符串进行了一次遍历,因此,时间复杂度为O(n)(其中,n为字符串的长度),此外,这种方法申请了额外的n+1个存储空间,因此,空间复杂度也为O(n)。

[考点]如何消除字符串的内嵌括号

?

2.?题目描述

??写一个方法,检查字符串是否是整数,如果是,返回其整数值。

正确答案:

整数分为负数与非负数,负数只有一种表示方法,而整数可以有两种表示方法。例如:-123,123,+123。因此,在判断字符串是否为整数的时候,需要把这几种问题都考虑到。下面主要介绍两种方法。

??方法一:递归法

??对于正数而言,例如123,可以看成12*10+3,而12又可以看成1*10+2。而-123可以看成(-12)*10-3,-12可以被看成(-1)*10-2。根据这个特点可以采用递归的方法来求解,可以首先根据字符串的第一个字符确定整数的正负,接着对字符串从右往左遍历,假设字符串为“c1c2c3…cn”,如果cn不是整数,那么这个字符串不能表示成整数;如果这个数是非负数(c1!=‘-’),那么这个整数的值为“c1c2c3…cn-1”对应的整数值乘以10加上cn对应的整数值,如果这个数是负数(c1==‘-’),那么这个整数的值为c1c2c3…cn-1对应的整数值乘以10减去cn对应的整数值。而求解子字符串“c1c2c3…cn-1”对应的整数的时候,可以用相同的方法来求解,因此可以采用递归的方法来求解。对于“+123”这种情况,可以首先去掉“+”,然后处理方法与“123”相同。由此可以得到递归表达式为:

??c1==‘-’?toint(“c1c2c3…cn-1”)*10-

文档评论(0)

江南博哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档