【每日一算法】(二)按规则打印数组并取值

题目:

给定一个数组,如 [3,3,4,5,6,7,8,9,9,4,3,5,6,7,8,1,0]

请组成如下图形后取值每行的最后一个数

3

345

67899

4356781

0

既,需要将目标数组按照1、3、5、7...等差数列分行,如有余数,直接插入

解题思路:
循环遍历目标数组,记录每行的数据,按需换行取值


func superposition(list []int) (nums []int) {
  // 定义一个标签记录当前行的长度
  target := 1
  // 生命一个list存储当前行的数据
  var temp []int
  // 开始遍历目标数组
  for i := 0; i < len(list); i++ {
    // 如果当前行中的数据达到目标长度
    if len(temp) == target {
      // 将当前行最后一个值追加到结果数组中
      nums = append(nums, temp[target-1])
      // 当前行list置空
      temp = []int{}
      // 当前行长度加2
      target = target + 2
      // 由于target已经达到目标长度,所以需要重新执行本次循环的数据
      i--
    } else {
      // 如果当前数是目标list的最后一个值,则直接将该值追加到结果中,并结束
      if i == len(list)-1 {
        nums = append(nums, list[i])
        return
      }
      // 将结果追加到当前行数组中
      temp = append(temp, list[i])
    }
  }
  return
}
235
1
0
0