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届#