image.png

    1. <?php
    2. class Solution {
    3. private $ret = [];
    4. /**
    5. * LEETCODEISHIRINGLEETCODEISHIRING
    6. *
    7. * L D R E I N
    8. * E OE II ET ES IG
    9. * EC IH NL CD HR
    10. * T S G O I
    11. *
    12. * @param $s
    13. * @param $numRows
    14. * @return string
    15. */
    16. public function zigzag($s, $numRows) : string {
    17. if (strlen($s) <= 1 || $numRows == 1) return $s;
    18. $preI = -1;
    19. $sign = 'down';
    20. for ($i = 0; $i <= strlen($s); $i++) {
    21. if ($sign == 'up') {
    22. $preI = $preI - 1;
    23. $this->assign($preI, $s[$i]);
    24. if ($preI == 0 ) {
    25. $sign = 'down';
    26. }
    27. } else {
    28. $preI = $preI + 1;
    29. $this->assign($preI, $s[$i]);
    30. if ($preI == $numRows - 1) {
    31. $sign = 'up';
    32. }
    33. }
    34. }
    35. return implode("\n", array_map(function ($a) {return implode('', $a);}, $this->ret));
    36. }
    37. // 赋值
    38. private function assign($a, $value, $fill = ' ') {
    39. $this->ret[$a][] = $value;
    40. foreach ($this->ret as $k => $v) {
    41. if ($k != $a) {
    42. $this->ret[$k][] = $fill;
    43. }
    44. }
    45. }
    46. }
    47. $cls = new Solution();
    48. $r = $cls->zigzag('LEETCODEISHIRINGLEETCODEISHIRINGLEETCODEISHIRINGLEETCODEISHIRINGLEETCODEISHIRING', 8);
    49. print_r($r);