0826
This commit is contained in:
parent
beebc54755
commit
dea7cf2f92
8 changed files with 259 additions and 9 deletions
|
@ -1,4 +1,4 @@
|
|||
fun main() {
|
||||
val t = Test763()
|
||||
val t = Test125()
|
||||
t.test()
|
||||
}
|
28
src/Test125.kt
Normal file
28
src/Test125.kt
Normal file
|
@ -0,0 +1,28 @@
|
|||
class Test125 {
|
||||
class Solution {
|
||||
fun isPalindrome(s: String): Boolean {
|
||||
val sb = StringBuffer()
|
||||
s.lowercase().forEach {
|
||||
if (it in 'a'..'z' || it in '0'..'9'){
|
||||
sb.append(it)
|
||||
}
|
||||
}
|
||||
var l = 0
|
||||
var r = sb.lastIndex
|
||||
while (l<r){
|
||||
if (sb[l]!=sb[r]){
|
||||
return false
|
||||
}
|
||||
l++
|
||||
r--
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
fun test(): Unit {
|
||||
println(Solution().isPalindrome("A man, a plan, a canal: Panama"))
|
||||
println(Solution().isPalindrome("race a car"))
|
||||
|
||||
}
|
||||
}
|
82
src/Test19.kt
Normal file
82
src/Test19.kt
Normal file
|
@ -0,0 +1,82 @@
|
|||
class Test19 {
|
||||
class ListNode(var `val`: Int) {
|
||||
var next: ListNode? = null
|
||||
}
|
||||
|
||||
class Solution {
|
||||
fun removeNthFromEnd(head: ListNode?, n: Int): ListNode? {
|
||||
var slower = head
|
||||
var faster = head
|
||||
|
||||
// faster move n steps
|
||||
for (ignored in 0..<n){
|
||||
faster = faster!!.next
|
||||
}
|
||||
|
||||
// case of remove head
|
||||
if (faster == null){
|
||||
return head!!.next
|
||||
}
|
||||
|
||||
// then move
|
||||
while (faster?.next != null){
|
||||
faster = faster.next
|
||||
slower = slower!!.next
|
||||
}
|
||||
|
||||
// delete
|
||||
slower!!.next = when(slower.next){
|
||||
null -> null
|
||||
else -> slower.next!!.next
|
||||
}
|
||||
|
||||
return head
|
||||
}
|
||||
}
|
||||
|
||||
fun test() {
|
||||
val solution = Solution()
|
||||
|
||||
// 测试用例 1
|
||||
val head1 = ListNode(1).apply {
|
||||
next = ListNode(2).apply {
|
||||
next = ListNode(3).apply {
|
||||
next = ListNode(4).apply {
|
||||
next = ListNode(5)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
val result1 = solution.removeNthFromEnd(head1, 2)
|
||||
printList(result1) // 预期输出: [1, 2, 3, 5]
|
||||
|
||||
// 测试用例 2
|
||||
val head2 = ListNode(1)
|
||||
val result2 = solution.removeNthFromEnd(head2, 1)
|
||||
printList(result2) // 预期输出: []
|
||||
|
||||
// 测试用例 3
|
||||
val head3 = ListNode(1).apply {
|
||||
next = ListNode(2)
|
||||
}
|
||||
val result3 = solution.removeNthFromEnd(head3, 1)
|
||||
printList(result3) // 预期输出: [1]
|
||||
|
||||
val head4 = ListNode(1).apply {
|
||||
next = ListNode(2)
|
||||
}
|
||||
val result4 = solution.removeNthFromEnd(head4, 2)
|
||||
printList(result4) // 预期输出: [2]
|
||||
}
|
||||
|
||||
// 辅助函数:打印链表
|
||||
fun printList(head: ListNode?) {
|
||||
var current = head
|
||||
val result = mutableListOf<Int>()
|
||||
while (current != null) {
|
||||
result.add(current.`val`)
|
||||
current = current.next
|
||||
}
|
||||
println(result)
|
||||
}
|
||||
}
|
24
src/Test26.kt
Normal file
24
src/Test26.kt
Normal file
|
@ -0,0 +1,24 @@
|
|||
class Test26 {
|
||||
class Solution {
|
||||
fun removeDuplicates(nums: IntArray): Int {
|
||||
var unique = 0
|
||||
for (i in 1..<nums.size){
|
||||
if (nums[i]!=nums[unique]){
|
||||
nums[++unique] = nums[i]
|
||||
}
|
||||
}
|
||||
return unique+1
|
||||
}
|
||||
}
|
||||
|
||||
fun test(){
|
||||
val arr1 = intArrayOf(1,1,2)
|
||||
println(Solution().removeDuplicates(arr1))
|
||||
arr1.forEach { print("${it},") }.run { println() }
|
||||
|
||||
val arr2 = intArrayOf(0,0,1,1,1,2,2,3,3,4)
|
||||
println(Solution().removeDuplicates(arr2))
|
||||
arr2.forEach { print("${it},") }.run { println() }
|
||||
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
class Test46 {
|
||||
class Solution {
|
||||
fun permute(nums: IntArray): List<List<Int>> {
|
||||
val result = arrayOf(intArrayOf())
|
||||
for (i in)
|
||||
}
|
||||
}
|
||||
}
|
47
src/Test48.kt
Normal file
47
src/Test48.kt
Normal file
|
@ -0,0 +1,47 @@
|
|||
class Test48 {
|
||||
class Solution {
|
||||
fun rotate(matrix: Array<IntArray>): Unit {
|
||||
for (i in 0..(matrix.size-1)/2){
|
||||
matrix[i] = matrix[matrix.size-1-i]
|
||||
.also { matrix[matrix.size-1-i] = matrix[i] }
|
||||
}
|
||||
|
||||
for (i in 1..<matrix.size){
|
||||
for (j in 0..i){
|
||||
matrix[i][j] = matrix[j][i]
|
||||
.also { matrix[j][i] = matrix[i][j] }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun test() {
|
||||
val solution = Solution()
|
||||
|
||||
// 测试用例 1
|
||||
val matrix1 = arrayOf(
|
||||
intArrayOf(1, 2, 3),
|
||||
intArrayOf(4, 5, 6),
|
||||
intArrayOf(7, 8, 9)
|
||||
)
|
||||
solution.rotate(matrix1)
|
||||
printMatrix(matrix1) // 预期输出: [[7,4,1],[8,5,2],[9,6,3]]
|
||||
|
||||
// 测试用例 2
|
||||
val matrix2 = arrayOf(
|
||||
intArrayOf(5, 1, 9, 11),
|
||||
intArrayOf(2, 4, 8, 10),
|
||||
intArrayOf(13, 3, 6, 7),
|
||||
intArrayOf(15, 14, 12, 16)
|
||||
)
|
||||
solution.rotate(matrix2)
|
||||
printMatrix(matrix2) // 预期输出: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
|
||||
}
|
||||
|
||||
// 辅助函数:打印二维矩阵
|
||||
fun printMatrix(matrix: Array<IntArray>) {
|
||||
matrix.forEach { row ->
|
||||
println(row.joinToString(prefix = "[", postfix = "]", separator = ","))
|
||||
}
|
||||
}
|
||||
}
|
54
src/Test54.kt
Normal file
54
src/Test54.kt
Normal file
|
@ -0,0 +1,54 @@
|
|||
class Test54 {
|
||||
class Solution {
|
||||
fun spiralOrder(matrix: Array<IntArray>): List<Int> {
|
||||
val column = matrix[0].size
|
||||
val row = matrix.size
|
||||
val result = MutableList(column * row) { 0 }
|
||||
|
||||
var read = 0
|
||||
var i = 0
|
||||
var j = 0
|
||||
var direction = 0 // →0 ↓1 ←2 ↑3
|
||||
var round = 0
|
||||
|
||||
while (read != column * row){
|
||||
result[read] = matrix[i][j]
|
||||
read++
|
||||
|
||||
// check boundary
|
||||
if ((direction == 0 || direction == 1 ) && j + 1 + round == column){ // at rightmost
|
||||
if (i - round == 0){ //right up
|
||||
direction = 1
|
||||
}
|
||||
if (i + 1 + round == row){
|
||||
direction = 2
|
||||
}
|
||||
} else if ((direction == 2 || direction == 3 ) &&j - round == 0){ // left
|
||||
if (i + 1 + round == row){
|
||||
direction = 3
|
||||
}
|
||||
if (i - round -1 == 0){
|
||||
direction = 0
|
||||
round ++
|
||||
}
|
||||
}
|
||||
|
||||
// move pointer
|
||||
when (direction){
|
||||
0 -> j++
|
||||
1 -> i++
|
||||
2 -> j--
|
||||
3 -> i--
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
}
|
||||
fun test(){
|
||||
val solution = Solution()
|
||||
println(solution.spiralOrder(arrayOf(intArrayOf(1,2,3), intArrayOf(4,5,6), intArrayOf(7,8,9))))
|
||||
println(solution.spiralOrder(arrayOf(intArrayOf(1,2,3,4), intArrayOf(5,6,7,8), intArrayOf(9,10,11,12))))
|
||||
|
||||
}
|
||||
}
|
23
src/Test658.kt
Normal file
23
src/Test658.kt
Normal file
|
@ -0,0 +1,23 @@
|
|||
import kotlin.math.abs
|
||||
|
||||
class Test658 {
|
||||
class Solution {
|
||||
fun findClosestElements(arr: IntArray, k: Int, x: Int): List<Int> {
|
||||
var left = 0
|
||||
var right = arr.size - 1
|
||||
while (right - left + 1 != k){
|
||||
if (abs(arr[left] - x) <= abs(arr[right] - x)){
|
||||
right--
|
||||
}else{
|
||||
left ++
|
||||
}
|
||||
}
|
||||
return arr.slice(left..right)
|
||||
}
|
||||
}
|
||||
|
||||
fun test(){
|
||||
println(Solution().findClosestElements(intArrayOf(1,2,3,4,5),4,3))
|
||||
println(Solution().findClosestElements(intArrayOf(1,2,3,4,5),4,-1))
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue