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

前端之家收集整理的这篇文章主要介绍了算法基础:最大递减数问题(Golang实现)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。
如: 95345323,递减数有:953,95,53,532,32,那么最大的递减数为953。
如果输入的数字为负数,返回-1。
如果找不到递减数,也返回-1.

代码实现:

package huawei

import (
	"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
}

猜你在找的Go相关文章