给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。
如: 95345323,递减数有:953,95,53,532,32,那么最大的递减数为953。
如果输入的数字为负数,返回-1。
如果找不到递减数,也返回-1.
代码实现:
package huaweiimport ( "fmt" "sort" "strconv")func Test5Base() { num := 431492 degressiveNums := getDegressiveNums(num) max := -1 if len(degressiveNums) > 0 { max = getMax(degressiveNums) } fmt.Println("max:",max)}//获取num的所有递减数func getDegressiveNums(num int) []int { if num < 0 { return []int{-1} } degressiveNums := make([]int,0) numStr := strconv.Itoa(num) length := len(numStr) //长度为i的子串 for i := 2; i < length; i++ { //从j开始截取 for j := 0; j < length-i+1; j++ { //截取数字 n,err := strconv.Atoi(numStr[j : j+i]) checkerror(err,"string to integer") //是否为递减数 if isDegressive(n) { degressiveNums = append(degressiveNums,n) } } } return degressiveNums}//判断数字num是否是递减数func isDegressive(num int) bool { weishu := make([]int,0) for num >= 1 { n := num % 10 weishu = append(weishu,n) num /= 10 } return sort.IntsAreSorted(weishu)}//获取一个slice中最大的数func getMax(nums []int) int { if len(nums) == 0 { panic("empty slice.") } max := nums[0] for i := 1; i < len(nums); i++ { if nums[i] > max { max = nums[i] } } return max}总结
以上是内存溢出为你收集整理的算法基础:最大递减数问题(Golang实现)全部内容,希望文章能够帮你解决算法基础:最大递减数问题(Golang实现)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)