7. 整数反转
This commit is contained in:
parent
64c805cf06
commit
51984f6f9b
118
main.go
118
main.go
|
|
@ -1,55 +1,91 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// ListNode Definition for singly-linked list.
|
||||
type ListNode struct {
|
||||
Val int
|
||||
Next *ListNode
|
||||
}
|
||||
//type Test interface {
|
||||
//}
|
||||
//
|
||||
//func condTest(cond *sync.Cond) {
|
||||
// cond.L.Lock()
|
||||
// cond.Wait()
|
||||
// fmt.Println("condTest")
|
||||
// cond.L.Unlock()
|
||||
//}
|
||||
//func chanTest(ch chan<- *Test) {
|
||||
//
|
||||
//}
|
||||
|
||||
func isPalindrome(head *ListNode) bool {
|
||||
srcHead := head
|
||||
head = head.Next
|
||||
// var left, right *ListNode
|
||||
cnt := 1
|
||||
for head != nil {
|
||||
head = head.Next
|
||||
cnt++
|
||||
func reverse(x int) int {
|
||||
neg := false
|
||||
if x < 0 {
|
||||
neg = true
|
||||
x = -x
|
||||
}
|
||||
head = srcHead.Next
|
||||
lastNode := srcHead
|
||||
srcHead.Next = nil
|
||||
half := cnt / 2
|
||||
half--
|
||||
for range half {
|
||||
p := head.Next
|
||||
head.Next = lastNode
|
||||
lastNode = head
|
||||
head = p
|
||||
s := fmt.Sprintf("%d", x)
|
||||
var sb strings.Builder
|
||||
for i := len(s) - 1; i >= 0; i-- {
|
||||
sb.WriteByte(s[i])
|
||||
}
|
||||
if cnt&1 == 1 {
|
||||
head = head.Next
|
||||
s = sb.String()
|
||||
var ans int32 = 0
|
||||
for c := range s {
|
||||
t, _ := strconv.ParseUint(string(s[c]), 10, 16)
|
||||
ans = ans*10 + int32(t)
|
||||
}
|
||||
for head != nil && lastNode != nil {
|
||||
if head.Val != lastNode.Val {
|
||||
return false
|
||||
if neg {
|
||||
ans = -ans
|
||||
x = -x
|
||||
}
|
||||
s1, s2 := fmt.Sprintf("%d", x), fmt.Sprintf("%d", ans)
|
||||
if neg {
|
||||
s1 = s1[1:]
|
||||
s2 = s2[1:]
|
||||
}
|
||||
if len(s1) != len(s2) {
|
||||
for len(s2) < len(s1) {
|
||||
s2 = "0" + s2
|
||||
}
|
||||
head = head.Next
|
||||
lastNode = lastNode.Next
|
||||
}
|
||||
if head != nil || lastNode != nil {
|
||||
return false
|
||||
for i := 0; i < len(s1); i++ {
|
||||
if s1[i] != s2[len(s2)-1-i] {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
return true
|
||||
return int(ans)
|
||||
}
|
||||
|
||||
//9646324351
|
||||
//2147483648
|
||||
|
||||
func main() {
|
||||
isPalindrome := isPalindrome(&ListNode{
|
||||
Val: 1,
|
||||
Next: &ListNode{
|
||||
Val: 2,
|
||||
},
|
||||
})
|
||||
fmt.Printf("isPalindrome: %v\n", isPalindrome)
|
||||
fmt.Println(reverse(1534236469))
|
||||
//var x int = 16
|
||||
//var y any = x
|
||||
//if _, ok := y.(int); ok {
|
||||
// fmt.Println(x)
|
||||
//}
|
||||
//if _, ok := y.(int32); ok {
|
||||
// fmt.Println(x)
|
||||
//}
|
||||
//var mu sync.Mutex
|
||||
//sync.NewCond(&mu)
|
||||
//make(chan *Test, 6)
|
||||
//var wg sync.WaitGroup
|
||||
//wg.Add(1)
|
||||
//wg.Done()
|
||||
//var mu sync.Mutex
|
||||
//cond := sync.NewCond(&mu)
|
||||
//
|
||||
//go condTest(cond)
|
||||
//go condTest(cond)
|
||||
//
|
||||
//time.Sleep(time.Second * 2)
|
||||
//cond.L.Lock()
|
||||
//cond.Broadcast()
|
||||
//cond.L.Unlock()
|
||||
//time.Sleep(time.Second * 2)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue