537 偶數 貪心

2021-09-27 07:16:26 字數 1293 閱讀 4915

description

從高位開始掃瞄,遇到奇數x時,可以採取兩種措施:

x = x-1,此時新數字小於原數字,為了按鍵次數最少,新數字要盡可能大。當x後的數字都取8時,新數字最大。

x = x+1,此時新數字小於原數字,為了按鍵次數最少,新數字要盡可能小。當x後的數字都取0時,新數字最小。

需要注意的是,當x=9進行+1操作時,會產生進製,還有可能導致高位的進一步進製。不過在這種情況下,運算元必然會大於進行-1操作,所以特判一下即可。

import math

if __name__ ==

'__main__'

: t =

int(

input()

)for case in

range(1

, t+1)

: s =

input()

num =

int(s)

res =

0for i in

range

(len

(s)):if

(ord

(s[i])-

ord(

'0'))%

2==1:

if(s[i]

=='9'):

s = s[

0:i]

+'8'

+'8'*(

len(s)

-i-1

) res = num -

int(s)

break

s = s[

0:i]

+chr

(ord

(s[i])-

1)+'8'*(

len(s)

-i-1

) num1 =

int(s)

s = s[

0:i]

+chr

(ord

(s[i])+

2)+'0'*(

len(s)

-i-1

) num2 =

int(s)

# print("nums: ", num1, num2);

res =

min(num-num1, num2-num)

break

print

("case #{}: {}"

.format

(case,

int(res)

))

537 複數乘法

給定兩個表示複數的字串。返回表示它們乘積的字串。注意,根據定義 i2 1 示例 1 輸入 1 1i 1 1i 輸出 0 2i 解釋 1 i 1 i 1 i2 2 i 2i 你需要將它轉換為 0 2i 的形式。示例 2 輸入 1 1i 1 1i 輸出 0 2i 解釋 1 i 1 i 1 i2 2 i ...

力扣 537 複數乘法

給定兩個表示複數的字串。返回表示它們乘積的字串。注意,根據定義 i2 1 輸入字串不包含額外的空格。輸入字串將以 a bi 的形式給出,其中整數 a 和 b 的範圍均在 100,100 之間。輸出也應當符合這種形式。輸入 1 1i 1 1i 輸出 0 2i 解釋 1 i 1 i 1 i2 2 i 2...

Leetcode 537 複數乘法 C

給定兩個表示複數的字串。返回表示它們乘積的字串。注意,根據定義 i2 1 示例 1 輸入 1 1i 1 1i 輸出 0 2i 解釋 1 i 1 i 1 i2 2 i 2i 你需要將它轉換為 0 2i 的形式。示例 2 輸入 1 1i 1 1i 輸出 0 2i 解釋 1 i 1 i 1 i2 2 i ...