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语言程序设计有所帮助。