3.13号百度回文串 前端算法第三题
结合做题时候的思路以及在牛客看到的其它大佬的帖子完整的code如下
总体思路就是填充,不过生成的结果应该会比看到的帖子略短一些,尤其是在x=n*(n+1)/2+n 的时候
package main
import (
"fmt"
"math"
"strings"
)
func getX(n int) int {
return (1 + n) * n / 2
}
func getN(x int) int {
return int((math.Sqrt(float64(x*8+1)) - 1) / 2)
}
func Palindromic(x int) string {
row := strings.Builder{}
repeat := func(c byte, n int) {
for n > 0 {
row.WriteByte(c)
n--
}
}
cs := "red"
p := 0
for x >0{
n := getN(x)
nx := getX(n)
repeat(cs[p%3], n)
x -= nx
p++
}
return row.String()
}
func main() {
r := getX(65)
d := 55
e := 6
fmt.Println(Palindromic(r + d + e))
fmt.Println(Palindromic(r + d + e + 1))
fmt.Println(Palindromic(r + d + e + 2))
fmt.Println(Palindromic(r + d + e + 3))
fmt.Println(Palindromic(r + d + e + 4))
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrreeeeeeeeeeddd
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrreeeeeeeeeedddr
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrreeeeeeeeeedddre
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrreeeeeeeeeedddrr
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrreeeeeeeeeedddd
d = 0
e = 0
fmt.Println(Palindromic(r + d + e))
fmt.Println(Palindromic(r + d + e + 1))
fmt.Println(Palindromic(r + d + e + 2))
fmt.Println(Palindromic(r + d + e + 3))
fmt.Println(Palindromic(r + d + e + 4))
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrre
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrred
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrree
// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrreed
r = 0
fmt.Println(Palindromic(r + d + e))
fmt.Println(Palindromic(r + d + e + 1))
fmt.Println(Palindromic(r + d + e + 2))
fmt.Println(Palindromic(r + d + e + 3))
fmt.Println(Palindromic(r + d + e + 4))
// r
// re
// rr
// rre
}
#百度笔试##前端##互联网##24届#