Golang最大递减数算法问题分析
本文实例讲述了Golang最大递减数算法问题。分享给大家供大家参考,具体如下:
给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。
如:95345323,递减数有:953,95,53,53,532,32,那么最大的递减数为953。
如果输入的数字为负数,返回-1。
如果找不到递减数,也返回-1.
代码实现:
packagehuawei import( "fmt" "sort" "strconv" ) funcTest5Base(){ num:=431492 degressiveNums:=getDegressiveNums(num) max:=-1 iflen(degressiveNums)>0{ max=getMax(degressiveNums) } fmt.Println("max:",max) } //获取num的所有递减数 funcgetDegressiveNums(numint)[]int{ ifnum<0{ return[]int{-1} } degressiveNums:=make([]int,0) numStr:=strconv.Itoa(num) length:=len(numStr) //长度为i的子串 fori:=2;i<length;i++{ //从j开始截取 forj:=0;j<length-i+1;j++{ //截取数字 n,err:=strconv.Atoi(numStr[j:j+i]) checkError(err,"stringtointeger") //是否为递减数 ifisDegressive(n){ degressiveNums=append(degressiveNums,n) } } } returndegressiveNums } //判断数字num是否是递减数 funcisDegressive(numint)bool{ weishu:=make([]int,0) fornum>=1{ n:=num%10 weishu=append(weishu,n) num/=10 } returnsort.IntsAreSorted(weishu) } //获取一个slice中最大的数 funcgetMax(nums[]int)int{ iflen(nums)==0{ panic("emptyslice.") } max:=nums[0] fori:=1;i<len(nums);i++{ ifnums[i]>max{ max=nums[i] } } returnmax }
希望本文所述对大家Go语言程序设计有所帮助。