回文數的golang實現

2022-07-25 07:06:12 字數 1530 閱讀 9911

判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數

輸入: 121

輸出:

true

輸入: -121

輸出:

false

解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121-。因此它不是乙個回文數。

輸入:

10輸出:

false

解釋: 從右向左讀, 為

01 。因此它不是乙個回文數。

首先分析題意,只要正序讀與反序讀時一樣的,那就是回文數,那麼負數就可以排除掉。

首先我們能想到的就是把整數轉成字串,然後比較字串的第一位與最後一位、第二位與倒數第二位。。。以此類推,只要有不一樣的就返回false

func ispalindrome(x int) bool

s := strconv.itoa(x)//

把整數轉成字串

for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1

}return

true

}

當然我們也可以不轉成字串來比較,那就有點麻煩,我們要借助一些容器,比如slice,首先我們要把整數每一位都拿出來:

var

is int

var i float64 = 1

for x != 0

拿到儲存著每一位數字的slice之後的比較就跟字串的比較一樣了:

for o, p := 0, len(is)-1; o < p; o, p = o+1, p-1

}return

true

整體不用轉成字串的**:

func ispalindrome(x int) bool

varis int

var i float64 = 1

for x != 0

for o, p := 0, len(is)-1; o < p; o, p = o+1, p-1

}return

true

}

我們再來比較一下兩種方法:

空間複雜度:

比較下來,還是轉字串的好

還有一種方法從leetcode上看到:

func ispalindrome3(x int) bool

revertednumber := 0

for x >revertednumber

//當數字長度為奇數時,我們可以通過 revertednumber/10 去除處於中位的數字。

//例如,當輸入為 12321 時,在 while 迴圈的末尾我們可以得到 x = 12,revertednumber = 123,

//由於處於中位的數字不影響回文(它總是與自己相等),所以我們可以簡單地將其去除。

return x == revertednumber || x == revertednumber/10

}

Golang之回文數判斷

回文數含義 即是給定乙個數,這個數順讀和逆讀都是一樣的。例如 121,1221是回文數,123,1231不是回文數。判斷乙個整數是否是回文數 示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。...

golang 實現兩數之和

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 golang 實現 package main impor...

1079 延遲的回文數 C 實現

1079 延遲的回文數 20 分 給定乙個 k 1 位的正整數 n,寫成 a k a 1 a 0 的形式,其中對所有 i 有 0 a i 10 且 a k 0。n 被稱為乙個回文數,當且僅當對所有 i 有 a i a k i 零也被定義為乙個回文數。非回文數也可以通過一系列操作變出回文數。首先將該數...