Leetcode 564 尋找最近的回文數

2022-03-12 20:36:45 字數 914 閱讀 2762

分析:

是一道數學題。

距離最近的回文子串,總計三種可能情況。一是左半邊拷貝到右半邊,二是中間為0,則一半減一,再拷貝,三是中間為9,則一半加一,再拷貝。還有一些特殊情況。針對三位數,最近回文串範圍一定在[99,1001]之間,則再加上兩種情況。總共五種,減去與自身重複的選項。放進set。找到diff最小,若相同,則數值較小的結果,再輸出。

python

class solution:

def nearestpalindromic(self, n: str) -> str:

ans_set = set()

p1 = pow(10, len(n)-1)-1

p2 = pow(10, len(n))+1

ans_set.add(p1)

ans_set.add(p2)

mid = len(n)//2

for i in [-1, 0, 1]:

temp = str(int(n[: mid+(len(n)&0x01)])+i)

ans_set.add(int(temp + temp[-1-(len(n)&0x01)::-1]))

ans_set.discard(int(n))

mindiff = float('inf')

res = n

for i in ans_set:

if abs(int(n) - i) < mindiff:

mindiff = abs(int(n) - i)

res = str(i)

elif abs(int(n) - i) == mindiff:

res = str(min(i, int(res)))

return res

LeetCode 尋找最近的回文數

給定乙個整數 n 你需要找到與它最近的回文數 不包括自身 最近的 定義為兩個整數差的絕對值最小。示例 1 輸入 123 輸出 121 注意 n 是由字串表示的正整數,其長度不超過18。如果有多個結果,返回最小的那個。思路分析 如果陣列的字串長度 1,數字n 1 開頭為1,9 9為乙個候選答案 例 1...

尋找最近點對

一維的數很簡單,先排序,再掃瞄已排好的數,相鄰兩個進行比較即可,時間複雜度為o n log2n n o n log2n 兩維的話 把平面上n個點分成兩部分left和right。假設分別求出left和right兩部分最短距離mindistleft和mindistright,還有一種情況就是點對中乙個點...

尋找最近點對

問題 在空間中有n個點,尋找空間中最近的2個點。法一 遍歷,o n 2 法二 分治演算法 將點分為左右兩半,分別找到最近的2個點,然後考慮交叉位置的點對中的最小距離,在這3者中取最小的那個。o nlogn 步驟 1.按照x軸排序 2.找到中間點,分別進行處理 3.2邊處理完成,將進行 merge 過...