ポイント
-
asciiValueを使用することで各文字のASCIIコードを取得できる
S[char].asciiValue
コード
- 自力ACしたコードを使用
class Solution {
func scoreOfString(_ s: String) -> Int {
let S = Array(s)
var answer = 0
var left = 0
var right = 0
for char in 1 ..< S.count {
if let prevNumber = S[char-1].asciiValue {
left = Int(prevNumber)
}
if let number = S[char].asciiValue {
right = Int(number)
}
answer += abs(left-right)
}
return Int(answer)
}
}
必要な変数
-
S... 文字列Sの配列 -
answer... 答え -
left... 左辺 -
right... 右辺
実装方針
1. 変数の定義
let S = Array(s)
var answer = 0
var left = 0
var right = 0
2. forループの実装
実装方針
- 全文字のASCIIコードを取得し、1文字前のものと比較する
for char in 1 ..< S.count {
if let prevNumber = S[char-1].asciiValue {
left = Int(prevNumber)
}
if let number = S[char].asciiValue {
right = Int(number)
}
answer += abs(left-right)
}
-
answerにabs(left-right)を加算していく
3. 詰まったところ
1. UInt8同士の足し算はオーバーフローを引き起こす可能性があるということ
実装したコード
class Solution {
func scoreOfString(_ s: String) -> Int {
let S = Array(s)
var answer: UInt8 = 0
for char in 0 ..< S.count {
print(S[char].asciiValue)
if let number = S[char].asciiValue {
answer += number
}
}
return Int(answer)
}
}
発生したエラー
*** Signal 4: Backtracing from 0x55e5d6d97570... done ***
*** Swift runtime failure: arithmetic overflow ***
Thread 0 "prog" crashed:
0 [inlined] [system] 0x000055e5d6d97570 Swift runtime failure: arithmetic overflow in prog at //
1 0x000055e5d6d97570 specialized Solution.scoreOfString(_:) + 1200 in prog at solution.swift:8:24
Registers:
rax 0x0000000000000039 57
rdx 0xe100000000000000 16212958658533785600
rcx 0x0000000000000000 0
rbx 0x0000000000000001 1
rsi 0x8000000000000000 9223372036854775808
rdi 0x0000000000000001 1
rbp 0x000055e5d8711bd0 31 9b 2c 86 e0 55 00 00 5d 0b 98 3c 01 c8 b2 8c 1·,·àU··]··<·È²·
rsp 0x00007fffd959abf0 30 ac 59 d9 39 00 00 00 d0 09 71 d8 e5 55 00 00 0¬YÙ9···Ð·qØåU··
r8 0x0000000000000000 0
r9 0x1dffffffffffffff 2161727821137838079
r10 0x0000000100000000 4294967296
r11 0x8cb2c8013c980b5d 10138385618801527645
r12 0x000000000000006c 108
r13 0x000000000000006c 108
r14 0x000055e5d8710a18 00 00 00 00 00 00 00 e1 6c 00 00 00 00 00 00 00 ·······ál·······
r15 0x0000000000000000 0
rip 0x000055e5d6d97570 0f 0b 0f 0b 0f 0b 0f 0b 0f 0b 0f 0b 0f 0b 0f 0b ················
rflags 0x0000000000010217 AF PF CF
cs 0x0033 fs 0x0000 gs 0x0000
Images (19 omitted):
Backtrace took 0.39s
方針策定
- Intに変換して加算する
謝辞