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

原创 2015年07月08日 13:42:21

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


相关文章推荐

最大矩形求解问题(单调递减栈)

POJ2559 最大矩形面积,POJ2796 区间最大值 问题:求解给定的直方图中可以组成的矩形的最大面积值,假定每个格子的长度为1,如图所示,最大面积为阴影部分组成的矩形。 解析...

算法基础:排列组合问题-全排列(Golang实现)

【排列组合问题】 一共N辆火车(0

算法基础:正整数指定规则排序问题(Golang实现)

给定字符串内有很多正整数,要求对这些正整数进行排序,然后返回排序后指定位置的正整数排序要求:按照每个正整数的后三位数字组成的整数进行从小到大排序 1)如果不足三位,则按照实际位数组成的整数进行比较 ...

两个机试题:对称密码;最大递减数

里面一些细节问题值得思考和注意: 1.标准输入 Scanner sc =new Scanner(System.in); String str=sc.next(); 2.str.length()是字...

华为上机试题8(查找最大递减数)

题目给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。 如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递...
  • xdcanye
  • xdcanye
  • 2015年08月27日 15:10
  • 443

最大子数组问题-GoLang实现

在一个数组A中寻找一个最大的子数组,这个问题可以用分治策略来求解。 首先需要划分问题,最大的子数组只有如下3中情况: 情况1:最大子序列出现在A[low]~A[mid] 情况2:最大子序列出现在A[m...

最大子段和问题、算法实现

  • 2009年10月25日 10:30
  • 892KB
  • 下载

算法分析与设计最大约数问题

  • 2011年05月16日 09:12
  • 2KB
  • 下载

C++得到一个数组的最大递减数组({3,9,4,5,0}得到结果是{9,4,0})

#include using namespace std; template struct Node { T data; Node *link; Node():data(T()),link...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法基础:最大递减数问题(Golang实现)
举报原因:
原因补充:

(最多只允许输入30个字)