给你一个整数 n 和一个长度为 n、由数字组成的字符串 s。
拨号盘上的数字 0 到 9 按顺序排列,且拨号盘是环形的,因此 0 和 9 相邻。指针最初指向 0。
要按顺序拨出 s 中的每个数字,需要旋转指针,直到它指向该数字。每次旋转都会将指针移动到一个相邻的数字,你可以向任一方向旋转。如果指针已经指向要拨出的数字,则无需旋转。
在拨号之前,你可以执行以下操作至多一次:
0 <= k < n 的下标 k,并反转后缀 s[k..n - 1]。通过最优地选择是否执行该操作以及反转哪个后缀,返回拨出操作后的字符串所需的最少总旋转次数。
字符串的后缀是从字符串中的任意位置开始、延伸到字符串末尾的连续字符序列。
示例 1:
输入: n = 4, s = "1502"
输出: 9
解释:
反转从 k = 1 开始的后缀,得到 "1205",然后拨出该字符串。
| 步骤 | 起始数字 | 目标数字 | 旋转次数 |
|---|---|---|---|
| 1 | 0 | 1 | 1 |
| 2 | 1 | 2 | 1 |
| 3 | 2 | 0 | 2 |
| 4 | 0 | 5 | 5 |
总旋转次数为 1 + 1 + 2 + 5 = 9,这是最少的总旋转次数。
示例 2:
输入: n = 4, s = "2916"
输出: 12
解释:
选择不反转任何后缀,直接拨出 "2916"。
| 步骤 | 起始数字 | 目标数字 | 旋转次数 |
|---|---|---|---|
| 1 | 0 | 2 | 2 |
| 2 | 2 | 9 | 3 |
| 3 | 9 | 1 | 2 |
| 4 | 1 | 6 | 5 |
总旋转次数为 2 + 3 + 2 + 5 = 12,这是最少的总旋转次数。
示例 3:
输入: n = 4, s = "4219"
输出: 6
解释:
反转从 k = 0 开始的后缀,即反转整个字符串,得到 "9124",然后拨出该字符串。
| 步骤 | 起始数字 | 目标数字 | 旋转次数 |
|---|---|---|---|
| 1 | 0 | 9 | 1 |
| 2 | 9 | 1 | 2 |
| 3 | 1 | 2 | 1 |
| 4 | 2 | 4 | 2 |
总旋转次数为 1 + 2 + 1 + 2 = 6,这是最少的总旋转次数。
提示:
1 <= n == s.length <= 105s 仅由数字 '0' 到 '9' 组成