为了账号安全,请及时绑定邮箱和手机立即绑定

根据索引计算字符

根据索引计算字符

Go
杨__羊羊 2023-02-21 16:53:05
我当前的代码:var basicChars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")func GetFromIndex(index int) string {    length := len(basicChars)    size := 0 // size is the amount of characters in the final string    for {        if float64(index) > math.Pow(float64(length), float64(size))-2 {            size++        } else {            break        }    }    str := make([]rune, size)    for i := 0; i < size; i++ {        str[i] = basicChars[index%length]    }    return string(str)}我正在尝试用字母而不是数字来计算。我知道我可以使用 for 循环,但没有保存状态或无限期上升的好方法
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

根据您的描述 GetFromIndex(122) 应该返回 a8,而不是 bb

要么我没有得到正确的场景,要么我们缺少信息

-编辑-

我不确定这是最好的方法

  • 第一个角色每次都会移动

  • 第 2 -> 3 次

  • 第 3 次 -> 9 次 ...

我减去无用的循环

  • 第二个 -> 每个 3 * len(array)

  • 第三个 -> 每个 9 * len(array)

并获得他们在数组中的位置

func TestA(t *testing.T) {

    for i:=0; i<=30; i++ {

        fmt.Printf("%s i:{%d} \n",GetFromIndexBis(i),i)

    }


}

func GetFromIndex(index int) string {

    var basicChars = []rune("abc")

    len := len(basicChars)

    pow := 1

    sumPow := 0

    res :=""    

    

    // the first is a simple modulo

    res += string(basicChars[index%len])

    

    for {

        

        pow = pow * len

        // is the index big enought ?

        if index < pow+sumPow{

            break

        }


        // remove the first cycles where nothing pushed the wheels

        start := index - sumPow


        // number of cycle we need to make a full turn

        fullCycles := pow * len


        if start>=fullCycles {

            nbrOfUselessCycles := start / fullCycles

            start = start - fullCycles * nbrOfUselessCycles

        }


        index := (start / pow) -1


        // it's the last one

        if (index == -1) {

            res += string(basicChars[len-1])    

        }else {

            res += string(basicChars[index])

        }

        

        sumPow += pow

    }

    

    return res

}


查看完整回答
反对 回复 2023-02-21
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信