Leetcode 30 천도위, Week 2 Day 7, Perform String Shifts, in Swift
String
Math
這一題 호상 시신적, 환沒有原先題目頁面.
사유
這題應当該算是數學歸納的問題、步驟說明、演算法有更好解 혹은 시複雜度分析有問題的話都請留言告訴我.
步驟
정식 碼
class Solution {
func stringShift(_ s: String, _ shift: [[Int]]) -> String {
if s.count <= 1 { return s }
var moves = 0
// 取得算出所有移動後的最終步數
for pair in shift {
var direction = pair[0]
var steps = pair[1]
switch direction {
case 0: moves -= steps
case 1: moves += steps
default: break
}
}
// 為零就直接回傳
if moves == 0 { return s }
// 必要之惡
var characters = Array(s)
var length = characters.count
// 把步數正規化到 -length + 1 到 length - 1 之間
moves %= length
// 若步數為負值,把它轉換成相對應的正值
if moves < 0 {
moves += length
}
// 移動...移動...移動...
while moves > 0 && moves <= length {
characters.insert(characters.removeLast(), at: 0)
moves -= 1
}
return String(characters)
}
}
고층 하함
여과 열애 고층 하함적 이야기, 가이파 산출 최종 음계적 지방 개성
var moves = shift.reduce(0) { $0 + ($1[0] == 0 ? -1 : 1 ) * $1[1] }
상정 파정식 碼整體變短還有更激진적 做法, 不過會大大降低程式 碼的可讀性在這邊就不繼灌做了.
복도 분석
결과
과거의 시간 후 혼 모토 부족 요인 무법 지도 재기 부적 지방
Runtime: 8 ms
Memory Usage: 21.6 MB
개성 고층 하함적 운행 결과 여하(是壞掉了?)
자기 Testcase
직접 부착도타 제공적 框框裡面即可
"abc"
[[0,1],[1,2]]
"abcdefg"
[[1,1],[1,1],[0,2],[1,3]]
"wpdhhcj"
[[0,7],[1,7],[1,0],[1,3],[0,3],[0,6],[1,2]]
Reference
이 문제에 관하여(Leetcode 30 천도위, Week 2 Day 7, Perform String Shifts, in Swift), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/vc7/items/a861023d20c26ea937d0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)