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

Posted Brenda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础:最大递减数问题(Golang实现)相关的知识,希望对你有一定的参考价值。

给出一个非负整数,找到这个非负整数中包括的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。
如: 95345323,递减数有:953,95,53,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
}


以上是关于算法基础:最大递减数问题(Golang实现)的主要内容,如果未能解决你的问题,请参考以下文章

Golang基础_11-并发concurrency

算法基础:整数拆分问题(Golang实现)

基础2--求五位数中的递减数

求一个int型整数的两种递减数之和(java)--2015华为机试题

基础数据结构————堆

三个数中的最大成对递减数