題目描述:
我們有一些二維座標,如 「(1, 3)」 或 「(2, 0.5)」,然後我們移除所有逗號,小數點和空格,得到乙個字串s。返回所有可能的原始字串到乙個列表中。
原始的座標表示法不會存在多餘的零,所以不會出現類似於"00", 「0.0」, 「0.00」, 「1.0」, 「001」, "00.01"或一些其他更小的數來表示座標。此外,乙個小數點前至少存在乙個數,所以也不會出現「.1」形式的數字。
最後返回的列表可以是任意順序的。而且注意返回的兩個數字中間(逗號之後)都有乙個空格。
示例 1: 輸入: "(123)" 輸出: ["(1, 23)", "(12, 3)", "(1.2, 3)", "(1, 2.3)"]
示例 2: 輸入: "(00011)" 輸出: ["(0.001, 1)", "(0, 0.011)"] 解釋: 0.0, 00, 0001 或 00.01 是不被允許的。
示例 3: 輸入: "(0123)" 輸出: ["(0, 123)", "(0, 12.3)", "(0, 1.23)", "(0.1, 23)", "(0.1, 2.3)", "(0.12, 3)"]
示例 4: 輸入: "(100)" 輸出: [(10, 0)] 解釋: 1.0 是不被允許的。
分析:
將字串s進行分割成左右兩部分子字串,對子字串新增小數點,有如下情況:
if s == "": return
if s == "0": return [s]
if s == "0***0": return
if s == "0***": return ["0.***"]
if s == "***0": return [s]
return [s, "x.***", "xx.xx", "***.x"...]
將對子字串新增小數點當作單獨乙個函式:
vector
f(string str);if
(n>
1&& str[0]
=='0'
)return;if
(n==
1|| str[n-1]
=='0'
)return
; vector temp =
;//初始化陣列
for(
int i=
1; i++i)
temp.
push_back
(str.
substr(0
,i)+
'.'+str.
substr
(i))
;return temp;
}
返回乙個string,包含s中從pos開始的n個字元的拷貝(pos的預設值是0,n的預設值是s.size() - pos,即不加引數會預設拷貝整個s)。
若pos的值超過了string的大小,則substr函式會丟擲乙個out_of_range異常;若pos+n的值超過了string的大小,則substr會調整n的值,只拷貝到string的末尾。
整個**:
class
solution}}
return res;
}
vector
f(string str);if
(n>
1&& str[0]
=='0'
)return;if
(n==
1|| str[n-1]
=='0'
)return
; vector temp =
;//初始化陣列
for(
int i=
1; i++i)
temp.
push_back
(str.
substr(0
,i)+
'.'+str.
substr
(i))
;return temp;}}
;
參考: LeetCode81 搜尋旋轉排序陣列 II
二分查詢,但是下面的 在測試用例 3,1 1中出錯。package 牛客刷題.leetcode.查詢.search in rotated sorted array ii created by administrator on 2018 6 28 0028.public class solution ...
LeetCode 81 搜尋旋轉排序陣列 II
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回true,否則返回false。示例 1 輸入 nums 2,5,6,0,0,1,2 target 0輸出 t...
leetcode81 搜尋旋轉排序陣列 II
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。示例 1 輸入 nums 2,5,6,0,0,1,2 target 0 輸...