我只是想将其转换为字符串并与其反向进行比较
(defn is-palindrome? [num]
(= (str num) (reverse (str num))))
类似于以下内容:
(is-palindrome 1221)
返回false
我只是想将其转换为字符串并与其反向进行比较
(defn is-palindrome? [num]
(= (str num) (reverse (str num))))
类似于以下内容:
(is-palindrome 1221)
返回false
可以尝试这样做:
(defn is-palindrome? [num]
(= (str num) (apply str (reverse (str num)))))
在你的代码中,表达式(reverse (str 1221))
返回字符列表(\1 \2 \2 \1)
,需要将其转换为字符串才能进行比较。或者,你可以将两个数字都转换为字符列表,然后执行列表比较:
(defn is-palindrome? [num]
(= (seq (str num)) (reverse (str num))))
(defn palindrome? [num]
(= (seq (str num)) (clojure.string/reverse (str num))))
您的代码返回false,因为它正在比较一个字符串和一个序列,这两者永远不可能相等。
您可以通过将字符串显式转换为序列来使其正常工作,方法如下:
(defn is-palindrome? [num]
(let [digit-sequence (seq (str num))]
(= digit-sequence (reverse digit-sequence))))
(require 'clojure.string)
(defn palindrome? [s] (= s (clojure.string/reverse s)))
(defn palindrome-num? [n] (palindrome? (str n)))
(reverse (str 1221))
返回一个字符列表
(\1 \2 \2 \1)
但是(str 1221)是Java字符串