?回文数(类型转换)

题目

代码练习 - 图1

解答一:

  1. import "strconv"
  2. import "fmt"
  3. /**
  4. * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
  5. *
  6. *
  7. * @param x int整型
  8. * @return bool布尔型
  9. */
  10. func isPalindrome(x int) bool {
  11. // write code here
  12. var str string = strconv.Itoa(x)
  13. length := len(str)
  14. for i := 0; i < length/2; i++ {
  15. if str[i] != str[length-i-1] {
  16. return false
  17. }
  18. }
  19. return true
  20. }
这里注意转成string 不能直接string(x) 需要用到strconv的转换函数实现 解答二:
  • 简单转换 - 在高低精度上进行转换,可以用int(),string()的方式
  • 不同类型之间转换,建议用strconv的转换函数包括Atoi,string to int方式。Itoa ,int to string 方式

这里取个巧,用的Sprintf方式, Sprintf是将所有的格式化内容转为string形式并返回。Sprintf内置了String()函数进行转换,注意,这里不能循环嵌套使用string函数,只能递归一次。

  1. package main
  2. import "fmt"
  3. /**
  4. * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
  5. *
  6. *
  7. * @param x int整型
  8. * @return bool布尔型
  9. */
  10. func isPalindrome( x int ) bool {
  11. // write code here
  12. var str = fmt.Sprintf("%d", x)
  13. length := len(str)
  14. for i:=0; i< length/2; i++ {
  15. if str[i] != str[length-1-i]{
  16. return false
  17. }
  18. }
  19. return true
  20. }

字符类型转换有很大的问题

sort函数——排序

代码练习 - 图2

  1. package main
  2. import "sort"
  3. /**
  4. * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
  5. *
  6. *
  7. * @param x int整型 采购单价
  8. * @param y int整型 采购单价
  9. * @param z int整型 采购单价
  10. * @return int整型
  11. */
  12. func compare( x int , y int , z int ) int {
  13. // write code here
  14. arr := [3]int{x,y,z}
  15. sort.Ints(arr[:])
  16. a := arr[2] - arr[0]
  17. return a
  18. }

注意,要import sort

逻辑运算符

位运算符里,有&,|,!、^,返回的是整数

逻辑运算符&&、||、!返回的是bool

排序题2

代码练习 - 图3

解题两种解法:

代码练习 - 图4

易错

  1. package main
  2. import "sort"
  3. func minAndMax( s []int ) []int {
  4. // write code here
  5. sort.Ints(s)
  6. return append(s[1], s[len(s)-1])//错了!!!
  7. }

解释:

  1. append函数必须是在一个切片的基础上,加上点什么,可能是一个或多个元素,或其他切片,但至少有一个是切片
  2. 一个元素也可以成切片,切近截取切片,包头不包围
  1. package main
  2. import "sort"
  3. func minAndMax( s []int ) []int {
  4. // write code here
  5. sort.Ints(s)
  6. return append(s[:1], s[len(s)-1:]...)
  7. //或者是append(s[:1], s[len(s)-1])
  8. }

怎么用集合计算字符串出现最多次的字符并返回

代码练习 - 图5

  1. package main
  2. //import "fmt"
  3. /**
  4. * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
  5. *
  6. *
  7. * @param s string字符串
  8. * @return char字符型
  9. */
  10. func character( s string ) byte {
  11. // write code here
  12. //用集合统计字符出现次数
  13. ret := map[byte]int{}
  14. for i:=0; i<len(s); i++{
  15. if _,ok := ret[s[i]]; !ok{
  16. ret[s[i]] = 1
  17. //这就这个程序的巧妙之处,一开始怎么初始化——
  18. }else{
  19. ret[s[i]]++
  20. //增加
  21. }
  22. }
  23. //循环 + 判断 通过每个的比较,大的就留下,而不是排序法那样的全部比较
  24. maxnum := ret[s[0]]//第一个字符出现次数
  25. maxstr := s[0]//第一个字符
  26. for k,v := range ret{
  27. if v > maxnum{
  28. maxnum = v
  29. maxstr = k
  30. }
  31. }
  32. return maxstr
  33. }

?cp29 字符串的构成

  1. package main
  2. import "fmt"
  3. func main(){
  4. x := canConstruct("ab","aax")
  5. fmt.Printf("%t",x)
  6. }
  7. func canConstruct( des string , src string ) bool {
  8. // write code here
  9. map_1 := map[byte]int{}
  10. for i:=0; i<len(src); i++{
  11. sed := byte(src[i])//sed就单个字符,需要把string类型转换成byte类型
  12. if _, ok := map_1[sed]; !ok {
  13. map_1[sed] = 1
  14. } else {
  15. map_1[sed]++
  16. }
  17. }
  18. fmt.Println(map_1)
  19. for j:=0; j<len(des); j++{
  20. for k,_ := range map_1{
  21. k_1 := byte(des[j])
  22. if k_1 == k{
  23. map_1[k]--
  24. }
  25. if map_1[k]<0||map_1[k] == 0{
  26. return false
  27. }
  28. }
  29. }
  30. return true
  31. }