判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數
輸入: 121輸出:
true
輸入: -121
輸出:
false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121-。因此它不是乙個回文數。
輸入:
10輸出:
false
解釋: 從右向左讀, 為
01 。因此它不是乙個回文數。
首先分析題意,只要正序讀與反序讀時一樣的,那就是回文數,那麼負數就可以排除掉。
首先我們能想到的就是把整數轉成字串,然後比較字串的第一位與最後一位、第二位與倒數第二位。。。以此類推,只要有不一樣的就返回false
func ispalindrome(x int) bools := strconv.itoa(x)//
把整數轉成字串
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1
}return
true
}
當然我們也可以不轉成字串來比較,那就有點麻煩,我們要借助一些容器,比如slice,首先我們要把整數每一位都拿出來:
varis 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) boolvaris 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) boolrevertednumber := 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 零也被定義為乙個回文數。非回文數也可以通過一系列操作變出回文數。首先將該數...