1 回答

TA貢獻1828條經驗 獲得超4個贊
你需要先考慮算法。
并且要刪除的數字似乎不連續:
在這里temp := num[:i-d] + num[i:]
您試圖刪除 3 個相鄰的數字(對于d=3
)并且您應該嘗試刪除不相鄰的數字。
提示:
一次刪除一個數字 (?k
):n = n[:k] + n[k+1:]
首先出于學習目的,我建議您嘗試蠻力法:生成所有可能的狀態并找到其中最小的狀態。
對于最小的數字,左邊的數字小于右邊的數字。
刪除d
不連續的數字然后找到最小的數字。我推薦一個循環用于d
數字:和另一個用于查找要刪除的位置的for i := 0; i < d; i++ {
循環:?。?k
for j := 0; j < k; j++ {
package main
import "fmt"
func main() {
? ? n := "32751960"
? ? d := 3
? ? // fmt.Scan(&n, &d)
? ? for i := 0; i < d; i++ {
? ? ? ? k := len(n) - 1
? ? ? ? for j := 0; j < k; j++ {
? ? ? ? ? ? if n[j] > n[j+1] {
? ? ? ? ? ? ? ? k = j
? ? ? ? ? ? ? ? break
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? n = n[:k] + n[k+1:]
? ? }
? ? fmt.Println(n) // 21960
}
使用 1 個循環,如下所示:
package main
import "fmt"
func main() {
? ? n := "322311"
? ? d := 3
? ? // fmt.Scan(&n, &d)
? ? for j := 0; j < len(n)-1; j++ {
? ? ? ? if n[j] > n[j+1] {
? ? ? ? ? ? n = n[:j] + n[j+1:]
? ? ? ? ? ? j = -1
? ? ? ? ? ? d--
? ? ? ? ? ? if d <= 0 {
? ? ? ? ? ? ? ? break
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? n = n[:len(n)-d]
? ? fmt.Println(n) // 211
}
- 1 回答
- 0 關注
- 135 瀏覽
添加回答
舉報