算法基础:最大递减数问题(Golang实现)

算法基础:最大递减数问题(Golang实现),第1张

概述给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。 如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递减数为953。 如果输入的数字为负数,返回-1。 如果找不到递减数,也返回-1.   代码实现: package huaweiimport ( "fmt" "sort" "strconv")

给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。
如: 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实现)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1287499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存