layout: posttitle: Go 和 PHP 实现整数/字符串反转
subtitle: Go 和 PHP 实现整数/字符串反转
date: 2020-04-20
author: he xiaodong
header-img: img/default-post-bg.jpg
catalog: true
tags:
- Go
- PHP
- LeetCode
- 整数反转
- 字符串反转

原文链接:go leetcode,php 代码个人原创

整数反转(Reverse-Integer)

这是一个比较简单的题目,题干如下:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣

我觉得这个题目的考点在于让你有个意识:数字类型是有可能溢出的。

解题思路

这个题整体的思路就是:与10取模,再与10相除取整,往复循环直至目标值为0,流程图如下:
2020-04-20-Go和PHP实现整数反转 - 图1

其中需要注意点有两个:

  • 负数和正数其实不用分类讨论,例如 -12310 取模得到的值是 -3,与正数的处理逻辑是一致。
  • 溢出的判断,我这里采用了一个 倒推思路 :例如 C = A + B,那么如果没有溢出 可以得到 A = C - B,但是溢出了就 得到 A != C - B

Go 实现

  1. func reverse(x int) int {
  2. var (
  3. result = 0
  4. )
  5. // x为正负数不用分类讨论。
  6. // 因为:-123 % 10 = -3,与正数的处理逻辑一致
  7. for x != 0 {
  8. mod := x % 10
  9. newResult := result*10 + mod
  10. // 倒推思路: C = A + B,如果没有溢出 A = C - B,溢出之后 A != C - B
  11. if (newResult-mod)/10 != result {
  12. return 0
  13. }
  14. result = newResult
  15. // 去掉最后一位
  16. x = x / 10
  17. }
  18. return result
  19. }

PHP 实现

function reverseNum($num) {
    $result = 0;
    while ($num !== 0) {
        $mod = $num % 10;
        $newResult = $result * 10 + $mod;
        if (($newResult - $mod) / 10 !== $result) {
            return 0;
        }

        $result = $newResult;
        $num = (int) ($num / 10);  // php 需要取整,否则会出现 1 / 10 = 0.1
    }

    return $result;
}
echo reverseNum(123); // ouput: 321
echo reverseNum(120); // ouput: 21
echo reverseNum(-120); // ouput: -21

字符串反转

Go 实现:

func reverseWords1(s string) string {
    ss := strings.Fields(s)
    var r []string
    for j := len(ss) - 1; j >=0; j-- {
        r = append(r,ss[j])
    }
    return strings.Join(r," ")
}

PHP 实现:

function reverseStr($str) {
    $length = strlen($str);
    $reverseStr = '';
    for ($i = $length - 1; $i >= 0; $i--) {
        $reverseStr .= $str[$i];
    }

    return $reverseStr;
}
echo reverseStr('abc');  // output: cba

最后恰饭 阿里云全系列产品/短信包特惠购买 中小企业上云最佳选择 阿里云内部优惠券