题解 | #牛牛组数#
牛牛组数
http://www.nowcoder.com/questionTerminal/d4087657d86242169d2ed807d0d1410e
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回最大和的字符串
* @param x string字符串 即题目描述中所给字符串
* @param k int整型 即题目描述中所给的k
* @return string字符串
*/
func Maxsumforknumers(x string, k int) string {
// write code here
vec := make([]int, 10)
for i := 0; i < len(x); i++ {
vec[x[i]-'0'] += 1
}
sumb := 0
j := 0
for k > 1 {
if vec[j] > 0 {
vec[j]--
k--
sumb += j
} else {
j++
}
}
sumA := getSumA(vec)
getSum(sumA, sumb)
if sumA[0] == '0' {
sumA = sumA[1:]
}
return string(sumA)
}
func getSumA(vec []int) []byte {
str := make([]byte, 1)
str[0] = '0'
var j uint8
j = 9
for j < 10 {
for vec[j] > 0 {
str = append(str, j + '0')
vec[j]--
}
j--
}
return str
}
func getSum(sumA []byte, sumb int) {
k, left := len(sumA) - 1, 0
for sumb > 0 || left > 0 {
tmp := sumA[k]
sumA[k] = uint8((int(sumA[k] - '0') + (sumb % 10) + left) % 10) + '0'
left = (int(tmp - '0') + (sumb % 10) + left) / 10
k--
sumb /= 10
}
}
golang