zoukankan      html  css  js  c++  java
  • 算法基础:最大递减数问题(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
    }
    


  • 相关阅读:
    Linux下服务器开发的必要准备
    send()/ recv() 和 write()/ read()
    listen( ) accept( )
    sock( ) bind( ) connect( )
    SRCNN 卷积神经网络
    猫狗大战
    socket相关函数
    TCP详解
    【Dijkstra priority!】分层图
    树状数组
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5316266.html
Copyright © 2011-2022 走看看