作为一个一直1AC的选手来说,能够A掉两题真的超级开心,可能是前两题比较简单吧,就直接上截图吧。
第一题代码
func largestInteger(num int) int {
s := strconv.Itoa(num)
n := len(s)
odd, even := []int{}, []int{}
vis := []int{}
for i := 0; i < n; i++ {
if s[i]%2 == 0 {
odd = append(odd, -int(s[i]))
vis = append(vis, 1)
} else {
even = append(even, -int(s[i]))
vis = append(vis, 0)
}
}
sort.Ints(odd)
sort.Ints(even)
res := ""
i, j := 0, 0
for k := 0; k < n; k++ {
if vis[k] == 1{
res += string(-odd[i])
i++
}else{
res += string(-even[j])
j++
}
}
ans, _ := strconv.Atoi(res)
return ans
}
第二题代码
func minimizeResult(expression string) string {
nums := strings.Split(expression, "+")
n1, n2 := nums[0], nums[1]
nc1, nc2 := len(n1), len(n2)
min := math.MaxInt32
idxI, idxJ := 0, 0
for i := 0; i < nc1; i++ {
n11, n12 := 0, 0
if i == 0 {
n12, _ = strconv.Atoi(n1)
} else {
n11, _ = strconv.Atoi(n1[:i])
n12, _ = strconv.Atoi(n1[i:])
}
for j := 1; j <= nc2; j++ {
n21, n22 := 0, 0
if j == nc2 {
n21, _ = strconv.Atoi(n2)
} else {
n21, _ = strconv.Atoi(n2[:j])
n22, _ = strconv.Atoi(n2[j:])
}
if n11 == 0 {
n11 = 1
}
if n22 == 0 {
n22 = 1
}
sum := n11 * (n12 + n21) * n22
//fmt.Printf("%d*(%d+%d)*%d=%d\n", n11, n12, n21, n22, sum)
if sum < min {
min = sum
idxI, idxJ = i, j+nc1
}
}
}
//fmt.Printf("idxi=:%d,idxj=%d\n", idxI, idxJ)
//fmt.Printf("min=%d\n", min)
return expression[:idxI] + "(" + expression[idxI:idxJ+1] + ")" + expression[idxJ+1:]
}